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

使用dplyr对多选问卷二进制编码列重编码并按问题合并选项

实现方案

以下代码可以直接运行在你提供的模拟数据集上,一步得到目标结果:

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

# 接你原有的模拟数据生成代码后运行
result <- df %>%
  # 给每一行添加受访者编号,对应示例中的5位受访者
  mutate(resp_id = row_number()) %>%
  # 宽表转长表,把所有问卷题目的二进制列转成键值对
  pivot_longer(cols = starts_with("foo"), names_to = "var", values_to = "selected") %>%
  # 拆分变量名得到问题名称和对应选项
  mutate(
    question = str_replace(var, "_[A-F]$", ""),
    option = str_sub(var, -1)
  ) %>%
  # 只保留选中(值为1)的记录
  filter(selected == 1) %>%
  # 按受访者和问题分组,拼接选中的选项
  group_by(resp_id, question) %>%
  summarise(options = str_flatten(option), .groups = "drop") %>%
  # 转成宽表,每行一个问题,每列一个受访者,和示例输出格式一致
  pivot_wider(names_from = resp_id, values_from = options, values_fill = "")

运行后打印result即可得到你要求的输出:

# A tibble: 4 × 6
  question `1`   `2`   `3`   `4`   `5`  
  <chr>    <chr> <chr> <chr> <chr> <chr>
1 foo_1    D     ADF   D     BD    ABF  
2 foo_2    ACDE  ABCDF DEF   ABCEF BC   
3 foo_3a   BCDEF ABCDE AF    AB    ABDF 
4 foo_3b   CF    CF    ABCD  ABEF  EF   

如果需要将拼接结果作为新列追加到原数据集,只需要修改最后一步的pivot_wider参数,将names_from = resp_id改为names_from = question,再通过resp_id和原表做关联即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:27:02