在 R 中,如何将多个列中的某些字符串组合成按 ID 内的时间排列在长格式列中?
In R, how to combine certain strings from multiple columns to be arranged in a long format column by Time within ID?
在 R 中,我想 select 来自多个列 (dx1-dx3) 的某些字符串 (A2、D1),然后将它们按 id 以长格式放入一个列中,同时保留另一列(即, 时间)。下面是数据框。
id dx1 dx2 dx3 Time
1 A2 D1 1
1 B1 A1 D1 2
2 D1 1
2 A3 D1 2
2 A2 D1 3
我要的格式如下:
id name value Time
1 dx1 A2 1
1 dx3 D1 1
1 dx3 D1 2
2 dx1 D1 1
2 dx2 D1 2
2 dx1 A2 3
2 dx2 D1 3
我试过 d %>% select(id, contains('dx'), Time) %>% pivot_longer(cols = -c('id') ) %>% filter(str_detect(值, 'A2|D1')).我得到的结果没有时间列。您对如何保留“时间”列有什么建议吗?
尝试 reshape2::melt
然后对行进行子集化:
library(reshape2)
df = data.frame(id=c(1,1,2,2,2),
dx1=c('A2','B1','D1','A3','A2'),
dx2=c(NA, 'A1', NA, 'D1', 'D1'),
dx3=c('D1','D1',NA, NA, NA),
Time=c(1,2,1,2,3))
df2 = melt(df, measure.vars=c("dx1","dx2","dx3"), id.vars=c("id","Time"), variable.name="name")
df2 = df2[df2$value %in% c('A2','D1'),]
df2
id Time name value
1 1 1 dx1 A2
3 2 1 dx1 D1
5 2 3 dx1 A2
9 2 2 dx2 D1
10 2 3 dx2 D1
11 1 1 dx3 D1
12 1 2 dx3 D1
在 R 中,我想 select 来自多个列 (dx1-dx3) 的某些字符串 (A2、D1),然后将它们按 id 以长格式放入一个列中,同时保留另一列(即, 时间)。下面是数据框。
id dx1 dx2 dx3 Time
1 A2 D1 1
1 B1 A1 D1 2
2 D1 1
2 A3 D1 2
2 A2 D1 3
我要的格式如下:
id name value Time
1 dx1 A2 1
1 dx3 D1 1
1 dx3 D1 2
2 dx1 D1 1
2 dx2 D1 2
2 dx1 A2 3
2 dx2 D1 3
我试过 d %>% select(id, contains('dx'), Time) %>% pivot_longer(cols = -c('id') ) %>% filter(str_detect(值, 'A2|D1')).我得到的结果没有时间列。您对如何保留“时间”列有什么建议吗?
尝试 reshape2::melt
然后对行进行子集化:
library(reshape2)
df = data.frame(id=c(1,1,2,2,2),
dx1=c('A2','B1','D1','A3','A2'),
dx2=c(NA, 'A1', NA, 'D1', 'D1'),
dx3=c('D1','D1',NA, NA, NA),
Time=c(1,2,1,2,3))
df2 = melt(df, measure.vars=c("dx1","dx2","dx3"), id.vars=c("id","Time"), variable.name="name")
df2 = df2[df2$value %in% c('A2','D1'),]
df2
id Time name value
1 1 1 dx1 A2
3 2 1 dx1 D1
5 2 3 dx1 A2
9 2 2 dx2 D1
10 2 3 dx2 D1
11 1 1 dx3 D1
12 1 2 dx3 D1