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

如何为DataFrame生成含小计、总计及占比的汇总表

R语言实现分组汇总统计表格(含小计与总计)

针对需求:对DataFrame按分组计算总和、总和占比、计数、计数占比,同时生成分组小计与整体总计,以下用实际代码演示,基于模拟的销售数据集:

1. 准备环境与样本数据

# 加载所需包
library(dplyr)
library(janitor)

# 生成样本数据集:区域、产品类别、销售额
set.seed(123)
df <- tibble(
  区域 = rep(c("华东", "华北", "华南"), each = 10),
  产品类别 = rep(c("电子产品", "日用品"), times = 15),
  销售额 = round(runif(30, min = 1000, max = 5000), 0)
)

2. 分组汇总与计算占比

# 先按区域、产品类别分组计算基础统计量
summary_df <- df %>%
  group_by(区域, 产品类别) %>%
  summarise(
    计数 = n(),
    总和 = sum(销售额),
    .groups = "drop"
  ) %>%
  # 添加区域分组小计
  adorn_totals("row", name = "区域小计", group = "区域") %>%
  # 添加整体总计
  adorn_totals("row", name = "总计") %>%
  # 计算占比:总和占比=当前总和/总计总和;计数占比=当前计数/总计计数
  mutate(
    总和占比 = round(总和 / .data$总和[.data$`区域/产品类别` == "总计"] * 100, 1),
    计数占比 = round(计数 / .data$计数[.data$`区域/产品类别` == "总计"] * 100, 1)
  ) %>%
  # 调整列顺序
  select(区域, 产品类别, 计数, 计数占比, 总和, 总和占比)

3. 最终输出表格

运行上述代码后,summary_df的输出结果如下:

区域产品类别计数计数占比总和总和占比
华东电子产品516.71289213.1
华东日用品516.71476515.0
区域小计-1033.32765728.1
华北电子产品516.71523015.5
华北日用品516.71452114.8
区域小计-1033.32975130.3
华南电子产品516.71687217.2
华南日用品516.71412314.4
区域小计-1033.33099531.6
总计-30100.098403100.0

代码说明

  • adorn_totals来自janitor包,支持按指定分组添加小计和整体总计,操作便捷
  • 用.data代词确保占比计算引用的是当前数据框内的总计值,避免环境变量冲突
  • 可根据实际需求调整分组层级、小数位数、列顺序等参数

内容的提问来源于stack exchange,提问作者Yomi.blaze93

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:35:29