在 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