选择包含行中特定值的列的名称

elJ*_*rge 5 r dataframe

我正在使用data.frame:

        data.frame("A"=c(NA,5,NA,NA,NA),
                   "B"=c(1,2,3,4,NA),
                   "C"=c(NA,NA,NA,2,3),
                   "D"=c(NA,NA,NA,7,NA))
Run Code Online (Sandbox Code Playgroud)

这提供了以下形式的data.frame:

   A  B  C  D
1 NA  1 NA NA
2  5  2 NA NA
3 NA  3 NA NA
4 NA  4  2  7
5 NA NA  3 NA
Run Code Online (Sandbox Code Playgroud)

我的目的是检查data.frame的每一行,如果有一个值大于特定(让我们假设为2),并获得列的名称.

所需的输出(值大于2)应为:

for row 1 of the data.frame
x[1,]: c()

for row 2
x[2,]: c("A")

for row3
x[3,]: c("B")

for row4
x[4,]: c("B","D")

and for row5 of the data.frame
x[5,]: c("C")
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

use*_*275 6

你可以使用which:

lapply(apply(dat, 1, function(x)which(x>2)), names)
Run Code Online (Sandbox Code Playgroud)

dat为你的数据帧.

[[1]]
character(0)

[[2]]
[1] "A"

[[3]]
[1] "B"

[[4]]
[1] "B" "D"

[[5]]
[1] "C"
Run Code Online (Sandbox Code Playgroud)

编辑 flodel建议的更短版本:

lapply(apply(dat > 2, 1, which), names)
Run Code Online (Sandbox Code Playgroud)

编辑:(来自Arun)

首先,没有必要lapplyapply.你可以得到同样的apply:

apply(dat > 2, 1, function(x) names(which(x)))
Run Code Online (Sandbox Code Playgroud)

但是,使用applyon data.frame会将其强制转换为矩阵,如果data.frame很大,这可能并不明智.