You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取数据框每行中值为1的列名并合并为单列?

提取数据框每行中值为1的列名

先重现你的数据:

A <- data.frame(Red = c(1,0,0,0),
                Blue = c(0,1,0,1),
                Yellow = c(0,0,1,0))

目标输出:

B <- data.frame(Colour = c("Red", "Blue", "Yellow", "Blue"))

方法1:基础R实现

用max.col()快速定位每行最大值(也就是1)的列索引,再结合列名获取结果:

B <- data.frame(Colour = colnames(A)[max.col(A)])

也可以用apply()逐行遍历筛选:

B <- data.frame(Colour = apply(A, 1, function(x) names(x)[x == 1]))

方法2:tidyverse 工具链实现

通过宽表转长表的方式筛选出值为1的列名:

library(tidyverse)

B <- A %>%
  mutate(row_id = row_number()) %>%
  pivot_longer(-row_id, names_to = "Colour", values_to = "value") %>%
  filter(value == 1) %>%
  select(Colour) %>%
  arrange(row_id) %>%
  data.frame()

其中max.col()方法效率最高,适合处理大规模数据框。

内容的提问来源于stack exchange,提问作者R18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 10:24:53