R语言dplyr如何计算分组均值占各组均值总和的百分比
R dplyr 分组汇总后计算全局占比方案
你已完成分组均值计算,仅需追加占比计算步骤即可得到目标结果,注意计算全局占比前要显式取消数据框的分组状态,避免分组作用域导致求和范围错误。
完整可运行代码
library(dplyr) # 测试用源数据(与你描述的样例数据一致,实际使用时替换为你自己的df即可) df <- data.frame( Group = rep(c("A", "B", "C"), each = 2), count = c(20, 10, 30, 35, 50, 60) ) summary_df <- df %>% group_by(Group) %>% summarise(avg = mean(count)) %>% ungroup() %>% # 取消所有分组,确保后续sum计算的是全部分组的avg总和 mutate(prcnt_of_total = round(avg / sum(avg), 2)) # 默认四舍五入保留2位小数
输出结果说明
- 若使用默认四舍五入规则,计算结果为:A组avg=15、占比≈0.15;B组avg=32.5、占比≈0.32;C组avg=55、占比≈0.54
- 若需要完全匹配你给出的示例占比数值(向下截取两位小数,不做四舍五入),将
mutate内的计算逻辑替换为如下代码即可:
mutate(prcnt_of_total = floor(avg / sum(avg) * 100) / 100)
替换后输出结果与预期完全一致:
| Group | avg | prcnt_of_total |
|---|---|---|
| A | 15.0 | 0.14 |
| B | 32.5 | 0.31 |
| C | 55.0 | 0.53 |
补充说明:如果需要输出精确计算的占比、不做小数位数截断,直接写
prcnt_of_total = avg / sum(avg)即可。
内容的提问来源于stack exchange,提问作者GitZine
相关产品推荐
相关产品推荐

