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

如何在R中处理多选项问卷数据并生成分组对比饼图

多选项问卷分组占比饼图解决方案

问题背景

现有包含多选项问卷(Q1-Q4)的数据集,需对比确诊(diagnosis=yes)与未确诊(diagnosis=no)人群的**所有答案组合(含多选项)**占比,但原有代码仅统计单个选项,丢失了多选项组合的统计结果。

解决步骤与代码

1. 数据预处理与格式转换

先将宽格式数据转为长格式,同时处理字符串型"NA"为R原生缺失值,过滤无效缺失数据:

library(tidyverse)

# 加载原始数据
diagnosis <- c("yes", "no", "yes", "yes", "yes", "no", "yes", "no", "no", "no")
Q1 <- c("A","NA","A,B",NA,"NA","C,D,A","D","A","B,C,A", "NA")
Q2 <- c("D","NA","D,A,B","C","NA",NA,"A,B,C","A","A","A")
Q3 <- c("B","B,D","C,A,D","A",NA,"A","B,D,A","D","B","NA")
Q4 <- c("B","NA","C","C","C,A","C,B","D","B",NA,"A,B,D")
df <- data.frame(diagnosis, Q1,Q2,Q3,Q4)

# 宽转长+清理无效值
df_long <- df %>%
  pivot_longer(cols = starts_with("Q"), names_to = "Question", values_to = "Answer") %>%
  mutate(Answer = ifelse(Answer == "NA", NA, Answer)) %>% # 转换字符串"NA"为缺失值
  filter(!is.na(Answer)) # 过滤缺失的答案

2. 定义包含所有答案组合的因子水平

提取数据中实际出现的所有答案组合(包括多选项)作为因子水平,确保统计时不丢失任何组合:

# 获取所有唯一的答案组合
all_answer_combinations <- unique(df_long$Answer)
df_long <- df_long %>%
  mutate(Answer = factor(Answer, levels = all_answer_combinations))

3. 分组统计占比

按diagnosis和Question分组,统计每个答案组合的频数与占比:

df_summary <- df_long %>%
  group_by(diagnosis, Question, Answer) %>%
  summarise(count = n(), .groups = "drop") %>%
  group_by(diagnosis, Question) %>%
  mutate(percentage = count / sum(count) * 100) %>% # 计算组内占比
  ungroup()

4. 生成分组对比饼图

使用ggplot2生成分面饼图,直观对比不同人群的答案组合占比:

ggplot(df_summary, aes(x = "", y = percentage, fill = Answer)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) + # 转为饼图
  facet_grid(diagnosis ~ Question) + # 按人群和问题分面
  theme_void() + # 移除多余坐标轴
  labs(title = "确诊与未确诊人群的问卷答案组合占比",
       fill = "答案组合") +
  geom_text(aes(label = sprintf("%.1f%%", percentage)), 
            position = position_stack(vjust = 0.5)) # 添加百分比标签

关键说明

  • 处理字符串"NA":原始数据中部分"NA"是字符串类型,需转换为R原生缺失值NA,否则会被误统计为有效答案。
  • 动态因子水平:通过unique()获取实际存在的所有答案组合,避免手动指定因子水平导致的遗漏。
  • 组内占比计算:确保每个diagnosis+Question分组内的占比总和为100%,符合饼图的统计逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:10:30