如何为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的输出结果如下:
| 区域 | 产品类别 | 计数 | 计数占比 | 总和 | 总和占比 |
|---|---|---|---|---|---|
| 华东 | 电子产品 | 5 | 16.7 | 12892 | 13.1 |
| 华东 | 日用品 | 5 | 16.7 | 14765 | 15.0 |
| 区域小计 | - | 10 | 33.3 | 27657 | 28.1 |
| 华北 | 电子产品 | 5 | 16.7 | 15230 | 15.5 |
| 华北 | 日用品 | 5 | 16.7 | 14521 | 14.8 |
| 区域小计 | - | 10 | 33.3 | 29751 | 30.3 |
| 华南 | 电子产品 | 5 | 16.7 | 16872 | 17.2 |
| 华南 | 日用品 | 5 | 16.7 | 14123 | 14.4 |
| 区域小计 | - | 10 | 33.3 | 30995 | 31.6 |
| 总计 | - | 30 | 100.0 | 98403 | 100.0 |
代码说明
adorn_totals来自janitor包,支持按指定分组添加小计和整体总计,操作便捷- 用
.data代词确保占比计算引用的是当前数据框内的总计值,避免环境变量冲突 - 可根据实际需求调整分组层级、小数位数、列顺序等参数
内容的提问来源于stack exchange,提问作者Yomi.blaze93
相关产品推荐
相关产品推荐

