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

如何用dplyr对比分组均值与特定类别均值(基于mtcars数据集)

实现步骤与完整代码

没问题,我来帮你搞定这个需求!你已经完成了按cyl和gear分组计算各组mpg均值的第一步,接下来只需要简单扩展就能实现和gear==5的整体mpg均值对比:

1. 核心需求拆解

我们需要先算出所有gear=5的行(不管cyl取值)的mpg整体均值,再用每个cyl+gear分组的均值减去这个整体均值,得到差异值。

2. 两种实现方式

方式一:先单独计算整体均值(可读性更高)

这种方式把gear=5的整体均值单独提取出来,逻辑更清晰:

# 第一步:计算所有gear=5的mpg整体均值
gear5_mpg_mean <- mtcars %>% 
  filter(gear == 5) %>% 
  pull(mpg) %>% 
  mean()

# 第二步:分组计算并完成对比
df2 <- mtcars %>%
  group_by(cyl, gear) %>%
  mutate(
    mean_mpg = mean(mpg),  # 你原来的分组均值逻辑
    gear5_overall_mpg = gear5_mpg_mean,  # 加入gear=5的整体均值
    mpg_diff_from_gear5 = mean_mpg - gear5_overall_mpg  # 计算分组均值与整体均值的差异
  ) %>%
  ungroup()  # 可选:如果后续不需要保留分组状态,取消分组

方式二:管道内直接计算(代码更紧凑)

如果不想单独存储变量,也可以直接在mutate里嵌入子查询:

df2 <- mtcars %>%
  group_by(cyl, gear) %>%
  mutate(
    mean_mpg = mean(mpg),
    gear5_overall_mpg = mean(mtcars$mpg[mtcars$gear == 5]),
    mpg_diff_from_gear5 = mean_mpg - gear5_overall_mpg
  ) %>%
  ungroup()

3. 结果说明

运行代码后,df2会新增三列:

  • mean_mpg:当前cyl+gear组合的mpg均值
  • gear5_overall_mpg:所有gear=5行的mpg整体均值(所有分组的该值都相同)
  • mpg_diff_from_gear5:分组均值与gear=5整体均值的差异(正数表示分组均值更高,负数则更低)

你可以用以下代码快速查看结果示例:

head(df2[, c("cyl", "gear", "mean_mpg", "gear5_overall_mpg", "mpg_diff_from_gear5")])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:42:35