查找任何指定行的单元格值为 1 的所有列名

opp*_*ity 3 r dataframe

这是我对我的项目的一个问题。

假设我有这个数据集。

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

从这个数据集中,我希望能够指定任何随机行并找出单元格等于 1 的列名。例如,如果我要指定第一行,那么我将得到X1X3作为我的输出。同样,如果我要指定第二行,那么我将得到X1X4作为我的输出。如果我要指定第三行,那么我会得到X1我的输出。

我希望这些例子有意义。我在 StackOverflow 上环顾四周,但找不到我要找的东西。如果您能帮我解决这个问题,我将不胜感激。

akr*_*run 5

我们可以创建一个带有参数、数据和要传递的索引的函数,对数据进行子集化,创建一个逻辑向量并返回names数据集的

 f1 <- function(dat, i) {
           tmp <- dat[i, ]
           names(tmp)[tmp == 1]
   }

Run Code Online (Sandbox Code Playgroud)

-测试

> f1(df1, 1)
[1] "X1" "X3"
Run Code Online (Sandbox Code Playgroud)

数据

df1 <- structure(list(X1 = c(1L, 1L, 1L, 1L, 3L, 2L), X2 = c(2L, 3L, 
3L, 1L, 4L, 1L), X3 = c(1L, 2L, 4L, 2L, 3L, 3L), X4 = c(3L, 1L, 
2L, 3L, 2L, 4L)), class = "data.frame", row.names = c("1", "2", 
"3", "4", "5", "6"))
Run Code Online (Sandbox Code Playgroud)