r - 将包含相同变量的多列折叠为一列

标签 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

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

无论我阅读关于 reshape/reshape2/tidyr 的文档多少次,我都无法理解它们的实现。

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

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

最佳答案

尝试矩阵乘法:

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

给予:
  ID Diagnosis
1  A         1
2  B         2
3  C         2
4  D         4
5  E         3

注:我们使用它作为输入:
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)

关于r - 将包含相同变量的多列折叠为一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29447325/

相关文章:

r - 绘制R中quickhull算法给出的凸包(convhulln函数)

python - 如何从数组数组中创建一个 numpy 数组?

在 data.table 中 reshape

php - 通过 PHP 使用 R

r - 按条件将行值组合成字符向量

r - 通过匹配其他列来查找一列的唯一长度

r - XGBoost 预测函数返回的值大于 r 中目标变量的大小

r - 如何将命名向量更改为保留名称的数据框?

在 R 中 reshape data.frame

r - 创建信息更丰富的表格输出