如何创建汇总多类型问题的Data Frame或表格?
用dplyr批量生成问卷问题的三类汇总统计表格
需求说明
需要针对不同类型的问卷问题,批量生成三类汇总表:
- 是非题(仅Y/N响应):统计各选项的数量及占比
- 数值型问题:生成基础描述性统计(均值、中位数、最值、标准差等)
- 多选问题(选项以分号分隔):拆分选项后统计数量及占比
测试数据
read.table(text= "TestID Q1 Q2 Q3 Q4 Q5 Q6 1 Y 35 A;B;C N 40 X;Y;Z 2 N 32 B;C Y 38 X;Y 3 Y 22 B Y 28 X 4 Y 38 A;B Y 46 Z 5 Y 13 A N 9 Y 6 N 30 A;B N 21 Y;Z 7 N 36 A;C N 46 X;Z 8 Y 30 B;C Y 39 X;Z 9 Y 33 B N 39 X 10 N 20 C Y 19 Y 11 N 28 A;B Y 37 Y 12 N 28 A;B;C N 23 X 13 Y 28 A Y 30 X 14 Y 21 B;C Y 26 Y;Z 15 N 14 A;B N 7 X;Y", header = T, stringsAsFactors = F) -> df
批量处理代码
首先加载所需包:
library(dplyr) library(tidyr)
1. 是非题批量统计
先指定是非题列,转成长格式后分组统计:
# 定义是非题列 yes_no_cols <- c("Q1", "Q4") yes_no_summary <- df %>% select(all_of(yes_no_cols)) %>% pivot_longer(cols = everything(), names_to = "Question", values_to = "Response") %>% group_by(Question, Response) %>% count(name = "Count") %>% mutate(Percent = round(Count / sum(Count) * 100, 1)) %>% ungroup() print(yes_no_summary)
2. 数值型问题批量统计
指定数值列后,批量计算描述性统计:
# 定义数值型列 numeric_cols <- c("Q2", "Q5") numeric_summary <- df %>% select(all_of(numeric_cols)) %>% summarise(across(everything(), list( Mean = ~mean(.), Median = ~median(.), Min = ~min(.), Max = ~max(.), Std_Dev = ~sd(.) ), .names = "{.col}_{.fn}")) %>% pivot_longer(cols = everything(), names_to = c("Question", "Statistic"), names_sep = "_", values_to = "Value") %>% arrange(Question) print(numeric_summary)
3. 多选题批量统计
指定多选题列,拆分选项后统计:
# 定义多选题列 multi_choice_cols <- c("Q3", "Q6") multi_choice_summary <- df %>% select(all_of(multi_choice_cols)) %>% pivot_longer(cols = everything(), names_to = "Question", values_to = "Options") %>% separate_rows(Options, sep = ";") %>% group_by(Question, Options) %>% count(name = "Count") %>% mutate(Percent = round(Count / sum(Count) * 100, 1)) %>% ungroup() print(multi_choice_summary)
说明
- 后续更新数据后,只需维护
yes_no_cols、numeric_cols、multi_choice_cols这三个列名向量,重新运行代码即可自动生成最新的汇总表。 - 所有统计结果均以Data Frame格式输出,可直接用于导出表格或进一步可视化。
内容的提问来源于stack exchange,提问作者halowiz
相关产品推荐
相关产品推荐

