我有一个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可能适用于我的情况,但我无法成功地适应它。