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

在R中如何按参与者分组统计问卷多选选项的各因子总数量?

R语言调研多选字段分组统计频次实现方案

基于你已经拆分完成的new_dat数据集,以下是可直接运行的实现方案,你提到的长表转换思路完全可行,这里提供优化后的版本和细节说明:

优化Tidyverse实现代码

library(tidyverse)

new_dat %>%
  # 将C1-C5选择列转为长格式,仅保留分组、选择顺序、选项值三个字段
  pivot_longer(cols = -group, names_to = "choose_order", values_to = "option") %>%
  # 过滤掉未选择产生的空值
  filter(!is.na(option)) %>%
  # 按分组、选项维度统计选择次数
  count(group, option, name = "select_count") %>%
  # 转为宽表展示,行对应选项,列对应分组,未出现的组合默认填充0
  pivot_wider(names_from = group, values_from = select_count, values_fill = 0)

运行后即可得到你需要的统计结果,例如A组1号选项选择次数为1、4号选项选择次数为2,完全匹配需求。

代码优化点说明

  • 用filter提前剔除空值,无需后续单独调用na.omit
  • 用count替代group_by + summarise的组合,代码更简洁易读
  • 转宽表时通过values_fill = 0参数直接补全所有缺失的分组-选项组合的次数为0,无需单独调用replace_na,也不需要手动指定分组名称,适配更多分组的扩展场景

可选基础R实现方案

如果你不想依赖第三方包,也可以用基础R的交叉表函数实现:

# 提取所有非空的选项值
option_vec <- unlist(new_dat[, paste0("C", 1:5)])
option_vec <- option_vec[!is.na(option_vec)]
# 提取选项对应的分组信息
group_vec <- rep(new_dat$group, 5)
group_vec <- group_vec[!is.na(unlist(new_dat[, paste0("C", 1:5)]))]
# 生成交叉统计结果
stat_result <- table(group_vec, option_vec)

直接打印stat_result即可查看分组统计的频次数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:06:02