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

使用dplyr分组计算占比时代码过于繁琐,有无更简洁的实现方案?

简洁实现方案

以下两种方案都可以得到和你现有逻辑完全一致的计算结果,且步骤更简洁、可读性更强:

方案1:基于dplyr原生分组逻辑实现

思路:先按year+weight分组求和,利用summarise的分组控制参数,无需反复切换分组维度,也不需要额外去重:

library(dplyr)

df %>%
  group_by(year, weight) %>%
  # 求和后自动丢弃weight分组,仅保留上层year分组
  summarise(sum_quantity = sum(quantity), .groups = "drop_last") %>%
  # 直接按year分组计算占比
  mutate(sum_quantity = sum_quantity / sum(sum_quantity))

如果使用的dplyr版本较低不支持.groups参数,改成下面的写法即可兼容:

df %>%
  group_by(year, weight) %>%
  summarise(sum_quantity = sum(quantity)) %>%
  group_by(year) %>%
  mutate(sum_quantity = sum_quantity / sum(sum_quantity))

方案2:用count函数简化求和步骤

如果希望代码更短,可以用count的wt参数直接实现加权分组计数,替代group_by+sum的组合写法:

df %>%
  # wt参数指定按quantity字段求和,name参数自定义求和结果的列名
  count(year, weight, wt = quantity, name = "sum_quantity") %>%
  group_by(year) %>%
  mutate(sum_quantity = sum_quantity / sum(sum_quantity))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:45:01