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

如何在R语言中根据多列0/1值生成合并汇总列?

解决方案

针对你的需求,这里有两种高效的实现方式,不管变量数量多少都能直接套用,不用写繁琐的if else:

Base R 实现

先构造一个示例数据集方便测试:

df <- data.frame(
  var1 = c("1", "0", "1"),
  var2 = c("0", "1", "1"),
  var3 = c("0", "0", "0"),
  var4 = c("1", "0", "1"),
  stringsAsFactors = FALSE
)

用apply按行遍历处理,直接生成汇总列:

df$summary <- apply(df, 1, function(row) {
  # 筛选出当前行值为"1"的列名
  target_cols <- names(df)[row == "1"]
  # 无匹配时返回"None",否则用空格连接列名
  if (length(target_cols) == 0) "None" else paste(target_cols, collapse = " ")
})

Tidyverse 实现(dplyr + purrr)

如果你习惯用tidyverse工具链,可以这样写:

library(dplyr)
library(purrr)

df <- df %>%
  mutate(summary = pmap_chr(., ~ {
    current_row <- c(...)
    target_cols <- names(.)[current_row == "1"]
    if (length(target_cols) == 0) "None" else paste(target_cols, collapse = " ")
  }))

或者用rowwise语法更直观:

df <- df %>%
  rowwise() %>%
  mutate(summary = {
    # 标记当前行值为"1"的列
    is_selected <- c_across(everything()) == "1"
    target_cols <- names(.)[is_selected]
    if (length(target_cols) == 0) "None" else paste(target_cols, collapse = " ")
  }) %>%
  ungroup()

注意事项

  • 如果你的数据中是数值型的1和0,把代码里的row == "1"改成row == 1即可
  • 这两种方法都支持任意数量的变量,8个变量完全没问题,不用手动逐个判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:35:14