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

使用group_by()和mutate()生成组均值列失效问题求助

问题:分组计算均值时得到整体均值而非Site/Date分组均值

可能的原因及解决办法

1. 包冲突或未正确加载dplyr

如果环境中同时加载了plyr等与dplyr函数重名的包,会导致group_by和mutate无法按dplyr逻辑执行,最终计算出整体均值而非分组均值。

解决办法:

  • 卸载冲突包并加载dplyr:
# 卸载冲突的plyr包(若已加载)
detach("package:plyr", unload = TRUE)
# 加载dplyr
library(dplyr)
  • 或明确指定使用dplyr的函数,避免混淆:
df <- df %>%
  dplyr::group_by(Site, Date) %>%
  dplyr::mutate(avgScore = mean(Score, na.rm = TRUE))

2. Date列存在格式问题

你的Date列是字符型(<chr>),如果存在隐藏空格、格式不一致等情况,会导致group_by(Site, Date)无法正确分组(比如"20210616"和" 20210616"会被识别为不同分组),最终看起来像是计算了整体均值。

解决办法:
先清洗Date列,统一格式后再分组:

df <- df %>%
  # 去除Date列前后空格
  mutate(Date = trimws(Date)) %>%
  # 可选:将字符型Date转换为日期类型,规范格式避免问题
  mutate(Date = as.Date(Date, format = "%Y%m%d")) %>%
  group_by(Site, Date) %>%
  mutate(avgScore = mean(Score, na.rm = TRUE)) %>%
  # 可选:不需要保留分组时取消分组
  ungroup()

3. Score列存在NA值(可选排查)

如果Score列包含NA值,mean(Score)会返回NA,可能导致你误将后续填充的整体均值当成结果。加上na.rm = TRUE可忽略NA值,正确计算分组均值。

验证分组是否正确

你可以先单独计算分组均值,确认分组逻辑是否正确:

# 查看每个Site/Date组合的均值
group_means <- df %>%
  group_by(Site, Date) %>%
  summarise(avg_score = mean(Score, na.rm = TRUE))
print(group_means)

再对比mutate后新增的avgScore列,确认每个分组内的数值是否与group_means中的对应值一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:42:41