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

R长表数据多选项重复响应合并适配pivot_wider的实现问题

R语言多选题响应拼接与宽表转换解决方案

核心实现逻辑

核心需求是将同一受访者同一问题下的多个多选题响应合并,只需按受访者ID、问题两个维度分组后拼接响应即可,完全不需要依赖行号,适配每月更新的动态数据。

示例数据运行代码

步骤1:加载依赖与构造示例数据

library(tidyverse)
# 构造你提供的测试数据
test_df <- tibble(
  ID = c(1,1,2,2,3,3,4),
  Question = c("question 1", "question 2", "question 1", "question 2", "question 1", "question 1", "question 1"),
  Response = c("affiliation x", "course 1", "affiliation y", "course 1", "affiliation x", "affiliation z", "affiliation y")
)

步骤2:生成长表处理结果(符合你要求的中间输出)

processed_long <- test_df %>%
  # 按ID和问题双维度分组,确保同一个人同个问题的响应归为同一组
  group_by(ID, Question) %>%
  # 多个响应用逗号+空格拼接,若需要去重可改为 str_c(unique(Response), collapse = ", ")
  summarize(Response = str_c(Response, collapse = ", "), .groups = "drop")

运行后输出的长表和你期望的结果完全一致,可直接用于后续宽表转换。

步骤3:直接转换为宽表(可选,一步完成)

如果不需要中间长表,可直接链式调用转宽表函数:

processed_wide <- test_df %>%
  group_by(ID, Question) %>%
  summarize(Response = str_c(Response, collapse = ", "), .groups = "drop") %>%
  pivot_wider(
    id_cols = ID,
    names_from = Question,
    values_from = Response
  )

适配你的业务数据的修正代码

你之前代码的主要错误点:

  1. str_c("Response Text", ...)给字段名加了引号,变成拼接固定字符串而非取字段值
  2. aggregate公式写反,分组维度不全
    修正后的业务代码如下:
library(tidyverse)
course1 <- all_surveys %>%
  # 过滤指定问卷
  filter(`Survey Title` == "course 1") %>%
  # 按用户ID、问题、响应日期分组(若不需要按日期区分可删除`Response Date`分组项)
  group_by(`User ID`, Question, `Response Date`) %>%
  # 拼接响应,需要去重则加unique:str_c(unique(`Response Text`), collapse = ", ")
  summarize(`Response Text` = str_c(`Response Text`, collapse = ", "), .groups = "drop") %>%
  # 转换为宽表
  pivot_wider(
    id_cols = c(`User ID`, `Response Date`),
    names_from = Question,
    values_from = `Response Text`
  ) %>%
  # 替换为你需要保留的问题列名即可
  select(`User ID`, `Response Date`, 问题1, 问题2, 问题3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:15:08