r - 提取满足条件的每一行的列名

标签 r apply

<分区>

d <- structure(
  list(
    Cl = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
    SaCl = c(0, 1, 0, 0,0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0), 
    SiCl = c(0L,0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,0L, 0L, 0L), 
    ClLo = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
    SiClLo = c(0L, 0L, 0L,0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
    SaClLo = c(1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1), 
    SaLo = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
    SaSiLo = c(0L, 0L,0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
    SiLo = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
    LoSa = c(0L, 0L, 0L, 0L,0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
    Sa = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,0L, 0L, 0L, 0L, 0L, 0L, 0L)
  ), 
  row.names = c(NA, 20L),
  class = "data.frame"
)

每一行只有一个1。我想提取每行有 1 的列名,这样我的数据框看起来像

row.id | names
-------+-------
     1 | SaClLo
     2 | SaCl
     3 | SaClLo
     4 | SaClLo

我试着对每一行运行一个函数

apply(d, 1, function(x) colnames(x)[x == 1])

这是给我 NULL

最佳答案

使用 max.col 找到 1 的位置,并使用此向量选择相应的列名。

data.frame(row.id = 1:nrow(d),
           names = names(d)[max.col(d)])
#   row.id  names
#1       1 SaClLo
#2       2   SaCl
#3       3 SaClLo
#4       4 SaClLo
#...

关于r - 提取满足条件的每一行的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50476617/

相关文章:

r - 如何创建一个函数来改变具有变量名和 "_pct"的新列?

javascript - 尝试了解 underscore.js 源代码 - 在库中调用和应用

r - 使用 R 中的 apply 系列将 2 列数据框的每一行传递给我创建的函数?

python - 一次在多列上使用 pandas groupby().apply(list)

javascript - Node redis 不喜欢 function.apply()

database - R Shiny 的数据库管理

r - 使用 R Markdown 对 CSV 进行 Base64 编码

r - 使用 stat_summary : summary range reaches zero 以对数刻度绘制数据

r - 将数据框列与另一个数据框列进行比较

r - 如何使用传单绘制 SpatialPolygonsDataframe 中的特定列?