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

在dplyr::summarise中使用group_size分组运算报错,如何解决?

解决dplyr分组计算占比的问题

嘿,你的思路完全没问题,只是在获取组大小的时候用错了工具!你遇到的报错是因为group_size(.)的用法和dplyr在summarise中的上下文不匹配——虽然.指向的是分组后的tbl,但group_size更适合用来批量获取所有组的大小,而非在单个组的计算逻辑里调用。

其实dplyr专门为这个场景提供了更简洁的函数:n()。在分组后的summarise代码块里,n()会自动返回当前组的行数(也就是组的大小),完美适配你的需求。

正确的代码应该是这样:

mtcars %>% 
  group_by(cyl) %>% 
  summarise(manual_ratio = sum(am) / n())

运行这段代码后,你会得到每个cyl组里手动挡车辆的占比:

# A tibble: 3 × 2
    cyl manual_ratio
  <dbl>        <dbl>
1     4        0.727
2     6        0.429
3     8        0.143

要是你好奇为什么原来的方法行不通,补充说明下:group_size(.)会返回所有组的大小组成的向量,而在summarise的每一组计算中,你需要的是单个组的大小,n()正好做了这件事——它在每个组的上下文中只返回当前组的行数,所以计算起来更直接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:52:41