如何提取数据框每行中值为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
相关产品推荐
相关产品推荐

