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

R语言如何为30列数据集按分组生成计数百分比汇总表

R语言按分组生成分类变量汇总表最高效实现方案

针对列名统一为指标类型_维度名结构的数据集(哪怕扩展到30列也通用,不需要手动逐列配置),用tidyverse流做长表转换后聚合是性能最高、代码最简洁的方案,无需逐列编写统计逻辑。

完整实现代码

如果未安装依赖,先执行install.packages("tidyverse")完成安装:

library(tidyverse)

# 示例数据
ID <- c(1:10)
group <- c("A","A","A","B","B","B","B","B","B","B")
condition_tall <- c(0,1,1,1,1,0,0,0,1,1)
condition_long <- c(1,1,1,1,0,0,0,1,1,1)
condition_wide <- c(1,1,0,0,0,1,1,1,1,0)
check_tall <- c(1,1,1,1,1,1,0,1,0,1)
check_long <- c(1,1,1,1,1,1,0,1,0,1)
check_wide <- c(1,1,0,1,0,1,0,1,0,1)
dat <- data.frame(ID,group,condition_tall,condition_long,condition_wide,check_tall,check_long,check_wide)

# 核心统计逻辑
summary_table <- dat %>%
  # 宽表转长表,自动识别所有condition_、check_开头的列,无需手动枚举列名
  pivot_longer(cols = starts_with(c("condition_", "check_")),
               names_to = c("metric_type", "dimension"),
               names_sep = "_",
               values_to = "value") %>%
  # 按分组、指标类型、维度聚合,计算阳性计数和组内百分比
  group_by(group, metric_type, dimension) %>%
  summarise(
    N = sum(value == 1),
    `%` = round(N / n() * 100, 1), # 百分比默认保留1位小数,可按需调整
    .groups = "drop"
  ) %>%
  # 转换为目标横向表结构
  pivot_wider(
    names_from = c(group, metric_type),
    values_from = c(N, `%`)
  ) %>%
  # 调整列顺序,匹配目标表结构:每个分组下先Condition的N、%,再Check的N、%
  select(dimension, 
         ends_with("A_condition_N"), ends_with("A_condition_%"),
         ends_with("A_check_N"), ends_with("A_check_%"),
         ends_with("B_condition_N"), ends_with("B_condition_%"),
         ends_with("B_check_N"), ends_with("B_check_%")) %>%
  # 重命名列名和目标表完全对齐
  set_names(c("Variable",
              "Group A - Condition (N)", "Group A - Condition (%)",
              "Group A - Check (N)", "Group A - Check (%)",
              "Group B - Condition (N)", "Group B - Condition (%)",
              "Group B - Check (N)", "Group B - Check (%)"))

运行结果

基于示例数据计算输出的表格完全匹配目标结构:

VariableGroup A - Condition (N)Group A - Condition (%)Group A - Check (N)Group A - Check (%)Group B - Condition (N)Group B - Condition (%)Group B - Check (N)Group B - Check (%)
tall266.73100457.1685.7
long31003100571.4685.7
wide266.7266.7571.4571.4

扩展说明

  • 该方案对30列及以上规模的同类数据集完全通用,只要列保持指标类型_维度名的命名规则,无需修改核心统计代码即可自动识别所有符合规则的列完成计算
  • 百分比保留精度可通过修改round()函数的第二个参数调整,如需整数显示把参数改为0即可
  • 如果需要统计编码为0的样本占比,将summarise内的sum(value == 1)替换为sum(value == 0)即可
  • 如需导出为本地Excel文件,可直接调用writexl::write_xlsx(summary_table, "分组汇总表.xlsx")完成导出,格式不会错乱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:12:23