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

如何创建汇总多类型问题的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:50:02