提取列名称以R

时间:2017-03-23 16:41:58

标签: r for-loop matrix

我有一个1和0的矩阵,其中的rownames是不同个体的ID。我对值为1的行的顺序感兴趣:

    mat <- structure(c(0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 
0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1), .Dim = c(5L, 
11L), .Dimnames = list(c("2099", "2101", "2102", "2103", "2114"
), c("MAW", "MAE", "SacMouth", "Georgiana", "Bottom_routeB", 
"Top_routeB", "RM61", "RM80_5", "RM71", "RM88", "Release")))


      MAW MAE SacMouth Georgiana Bottom_routeB Top_routeB RM61 RM80_5 RM71 RM88 Release
2099   0   0        0         0             0          0    0      0    0    0       1
2101   0   0        0         0             1          1    0      0    0    1       1
2102   1   1        1         0             0          0    0      0    0    0       1
2103   0   1        0         0             1          1    0      0    1    0       1
2114   0   0        0         0             1          1    0      1    1    1       1

对于每个人,我需要从左到右提取第一次出现值1的列名。例如,上例中的输出应为:

ID     colname
2099   Release
2101   Bottom_routeB
2102   MAW
2103   MAE
2114   Bottom_routeB

我的第一次尝试是使用cumsum的for循环,然后使用tidyr按ID,colnames和cumsum值收集数据框,然后过滤出{ {1}},但这并不适用于1后跟一个或多个零的行(如上面的ID#value == 1所示),因为它会返回多行:

2103

非常感谢任何帮助。我找到了this related post,似乎解决方案3可能适用于我的情况,但我无法成功地适应它。

0 个答案:

没有答案