将包含相同变量的多个列折叠到一列中

Mak*_*ami 3 r reshape

我的数据如下所示:

ID   Diagnosis_1   Diagnosis_2   Diagnosis_3   Diagnosis_4
A        1             0             0             0
A        1             0             0             0
A        1             0             0             0
B        0             1             0             0
C        0             0             0             1
C        0             1             0             0
D        0             0             0             1
E        0             0             1             0
E        0             1             0             0
E        0             0             1             0
Run Code Online (Sandbox Code Playgroud)

Diagnosis_1:Diagnosis_4都是二元的,表示诊断的存在(1)或不存在(0).我想要做的是创建一个如下所示的数据框:

ID   Diagnosis
A        1
A        1
A        1
B        2
C        4
C        2
D        4
E        3
E        2
E        3
Run Code Online (Sandbox Code Playgroud)

无论我阅读有关reshape/reshape2/tidyr的文档多少次,我都无法绕过他们的实现.

我可以使用dplyr的mutate来解决我的问题,但这是一个耗时,迂回的方式来实现我的目标.

编辑:编辑的数据更真实地代表我的实际数据框架.

G. *_*eck 6

尝试矩阵乘法:

nc <- ncol(DF)
data.frame(ID = DF$ID, Diagnosis = as.matrix(DF[-1]) %*% seq(nc-1))
Run Code Online (Sandbox Code Playgroud)

赠送:

  ID Diagnosis
1  A         1
2  B         2
3  C         2
4  D         4
5  E         3
Run Code Online (Sandbox Code Playgroud)

注意:我们使用它作为输入:

Lines <- "ID   Diagnosis_1   Diagnosis_2   Diagnosis_3   Diagnosis_4
A        1             0             0             0
B        0             1             0             0
C        0             1             0             0
D        0             0             0             1
E        0             0             1             0"

DF <- read.table(text = Lines, header = TRUE)
Run Code Online (Sandbox Code Playgroud)