获取与数据框中特定行值匹配的列名

Ril*_*n42 1 r

我正在尝试获取单元格值为1的每一行的列名。但是,我的尝试无效,有人可以提供建议吗?

library(permute)
set.seed(42)
exampledf<- data.frame(allPerms(c(1,2,3,4)))
exampledf<-head(exampledf)
Run Code Online (Sandbox Code Playgroud)

我尝试了这个:

apply(exampledf,2,function(x){
    ll<-x[1]==1
    which(ll==T)
    })
Run Code Online (Sandbox Code Playgroud)

数据集

  X1 X2 X3 X4
1  1  2  4  3
2  1  3  2  4
3  1  3  4  2
4  1  4  2  3
5  1  4  3  2
6  2  1  3  4
Run Code Online (Sandbox Code Playgroud)

我的目标:

X1
X1
X1
X1
X1
X2
Run Code Online (Sandbox Code Playgroud)

lmo*_*lmo 5

这是一种方法:

# construct sample data.frame
set.seed(1234)
df <- data.frame(matrix(
                 c(sample(1:4, 4), sample(1:4, 4), 
                   sample(1:4, 4), sample(1:4, 4)), 
                 ncol=4, byrow=T))
# name data.frame
names(df) <- c(paste0("x", 1:4))

# get names of variables
names(df)[apply(df, 1, function(i) which(i == 1))]
Run Code Online (Sandbox Code Playgroud)

@DavidArenburg建议的一种方法可能更快(尤其是对于大型数据集)是

names(df)[which(df == 1, arr.ind=T)[, "col"]]
Run Code Online (Sandbox Code Playgroud)

因为它不需要使用该apply功能。

注意:由于没有permute包,因此构建了一个不同的data.frame。