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

Dplyr中mean()函数未按分组计算均值的问题排查

dplyr分组计算均值失效问题解决

问题描述

使用dplyr按Country字段分组后,通过mutate调用mean()计算Quarterly列的分组均值,结果返回的却是整列的全局均值,而非各分组的单独均值。相关代码及错误输出如下:

测试数据结构

data <- structure(list(Country = c("Argentina", "Argentina", "Argentina", 
"USA", "USA", "USA"), Indicator = c("Inflation", "Inflation", 
"Inflation", "Inflation", "Inflation", "Inflation"), Year = c("Y2022M3", 
"Y2022M6", "Y2022M9", "Y2022M3", "Y2022M6", "Y2022M9"), Quarterly = c(54.4386140151883, 
61.641920578111, 76.9071987097229, 8.0003895903483, 8.58063131836198, 
8.31761217342508), Monthly = c(56.0677775901444, 64.7393874239595, 
81.4559428900954, 8.55758636823278, 8.99522060858813, 8.22241023434256
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-6L))

错误操作代码及输出

data %>% 
  group_by(Country) %>%
  mutate(Year_average = mean(Quarterly, na.rm = T))

# A tibble: 6 x 6
# Groups:   Country [2]
  Country   Indicator Year    Quarterly Monthly Year_average
  <chr>     <chr>     <chr>       <dbl>   <dbl>        <dbl>
1 Argentina Inflation Y2022M3     54.4    56.1          36.3
2 Argentina Inflation Y2022M6     61.6    64.7          36.3
3 Argentina Inflation Y2022M9     76.9    81.5          36.3
4 USA       Inflation Y2022M3      8.00    8.56         36.3
5 USA       Inflation Y2022M6      8.58    9.00         36.3
6 USA       Inflation Y2022M9      8.32    8.22         36.3

核心原因及解决方案

1. 包冲突(最常见)

若环境中同时加载了plyr包,其mutate函数会覆盖dplyr的同名函数,导致分组逻辑失效。

解决办法:

  • 明确指定使用dplyr的mutate:
data %>% 
  group_by(Country) %>%
  dplyr::mutate(Year_average = mean(Quarterly, na.rm = T))
  • 卸载plyr并重新加载dplyr:
detach("package:plyr", unload = TRUE)
library(dplyr)

2. dplyr版本过旧

旧版本dplyr可能存在分组计算的bug,更新至最新版本即可修复:

install.packages("dplyr")
library(dplyr)

3. 验证分组有效性

可先通过以下代码确认分组是否正确应用:

# 查看当前分组变量
data %>% group_by(Country) %>% group_vars()

# 查看分组计数
data %>% group_by(Country) %>% count()

正确运行结果

执行修复后的代码,将得到符合预期的分组均值:

# A tibble: 6 x 6
# Groups:   Country [2]
  Country   Indicator Year    Quarterly Monthly Year_average
  <chr>     <chr>     <chr>       <dbl>   <dbl>        <dbl>
1 Argentina Inflation Y2022M3     54.4    56.1         64.3
2 Argentina Inflation Y2022M6     61.6    64.7         64.3
3 Argentina Inflation Y2022M9     76.9    81.5         64.3
4 USA       Inflation Y2022M3      8.00    8.56         8.30
5 USA       Inflation Y2022M6      8.58    9.00         8.30
6 USA       Inflation Y2022M9      8.32    8.22         8.30

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:20:51