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

按年份对DataFrame列数据求均值的实现方法

解决方案

首先需要从date列提取年份,再按年份分组计算overall和eastern的均值,以下是几种可行的实现方式:

方法一:Base R 用 aggregate(推荐,直接得到目标DataFrame)

# 提取年份列
df$year <- substr(df$date, 1, 4)
# 按年份分组求均值
result <- aggregate(cbind(overall, eastern) ~ year, data = df, FUN = mean)

运行后result就是你需要的3列3行DataFrame,结构示例:

year  overall  eastern
1 1997 17.54800 18.75100
2 1998 20.38250 21.43658
3 1999 20.87592 21.89508

方法二:修正tapply的用法

tapply默认处理单个向量,若要处理多列,可结合lapply实现:

df$year <- substr(df$date, 1, 4)
# 对目标列分别用tapply计算均值
mean_list <- lapply(df[, c("overall", "eastern")], function(x) tapply(x, df$year, mean))
# 转换为DataFrame并整理格式
result <- as.data.frame(do.call(cbind, mean_list))
result$year <- rownames(result)
result <- result[, c("year", "overall", "eastern")]

方法三:用dplyr包(管道式操作更简洁)

如果习惯tidyverse工具链,用dplyr的分组求和会更直观:

library(dplyr)
result <- df %>%
  mutate(year = substr(date, 1, 4)) %>%
  group_by(year) %>%
  summarise(overall = mean(overall), eastern = mean(eastern)) %>%
  ungroup()

补充说明

你之前用tapply失败,大概率是因为直接传入了整个DataFrame而非单个向量——tapply的第一个参数要求是向量,因此处理多列时需要结合循环或其他函数批量处理。相比之下,aggregate或dplyr的分组求和更适配这种多列分组统计的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:50:26