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

如何在R语言中合并数据框的多选项答案列并分析组合

解决方案

方法一:基础R实现

直接用apply()逐行遍历,提取对应值为"1"的列名,再用paste()拼接成指定格式:

# 原始数据
df <- data.frame(
  ID = c("001", "002", "003", "004", "005", "006"),
  Answer_1 = c("1", "1", "0", "0", "1", "0"),
  Answer_2 = c("1", "0", "1", "0", "0", "1"),
  Answer_3 = c("1", "1", "0", "1", "0", "1"),
  stringsAsFactors = FALSE
)

# 生成Answer_4列
df$Answer_4 <- apply(df[, -1], 1, function(x) {
  paste(names(x)[x == "1"], collapse = " | ")
})

# 查看结果
df

注:你给出的目标结果中ID001的Answer_4存在笔误,原始数据里该ID的三个选项均为选中状态,实际生成的结果应为Answer_1 | Answer_2 | Answer_3。

方法二:tidyverse 框架实现

用dplyr+tidyr的组合,逻辑更清晰,适合后续扩展分析:

library(dplyr)
library(tidyr)
library(stringr)

df1 <- df %>%
  pivot_longer(cols = starts_with("Answer_"), names_to = "Answer", values_to = "Value") %>%
  filter(Value == "1") %>%
  group_by(ID) %>%
  summarise(Answer_4 = str_c(Answer, collapse = " | "), .groups = "drop") %>%
  right_join(df, by = "ID") %>%
  select(ID, Answer_1, Answer_2, Answer_3, Answer_4)

df1

该方法先将宽表转为长表,筛选出选中的选项,再按ID分组拼接,最后合并回原表,便于后续添加更多统计逻辑。

方法三:data.table 高效实现

如果处理大数据集,data.table的速度优势更明显:

library(data.table)

setDT(df)
df[, Answer_4 := paste(names(.SD)[.SD == "1"], collapse = " | "), by = ID, .SDcols = starts_with("Answer_")]
df

.SDcols指定要处理的列,按ID分组后逐行拼接符合条件的列名,执行效率远高于基础R方法。

后续分析建议

生成Answer_4列后,可通过以下代码快速做描述统计:

# 统计各组合的出现次数
df %>% count(Answer_4)

# 计算各组合的占比
df %>% count(Answer_4) %>% mutate(ratio = n / sum(n))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:15:34