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

R语言group_by分组后计算满足条件行占比的最优实现方法

原生实现方案

你要计算的是同一天气分组下,不同运动的计数占当前天气总计数的比例,利用dplyr的分组层级特性就能直接实现,无需额外自定义函数,避免了冗余的全表过滤操作,效率远高于原有实现。

方案1:纯dplyr管道实现(最常用)

library(dplyr)

data %>%
  # 先按天气做一级分组
  group_by(weather) %>%
  # 统计当前天气下每个运动对应的天数
  count(sport, name = "days") %>%
  # 直接计算占比:sum(days)就是当前天气分组的总天数
  mutate(percentage = days / sum(days))

如果需要输出百分比格式,可以额外加一行调用scales包的格式化函数:

mutate(percentage = scales::percent(percentage, accuracy = 0.1))

方案2:base R原生实现(无需加载第三方包,效率最高)

直接用基础函数生成按天气维度计算的占比交叉表:

# margin=1 指定按行(天气维度)计算占比,每行求和结果为1
prop.table(table(data$weather, data$sport), margin = 1)

方案3:分组后直接汇总实现

如果需要保留group_by(weather, sport)的写法,可以用.groups参数控制分组保留层级:

data %>%
  group_by(weather, sport) %>%
  summarise(count = n(), .groups = "drop_last") %>%
  # drop_last会保留weather层级的分组,sum(count)即对应天气的总天数
  mutate(percentage = count / sum(count))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 19:06:04