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

如何在DataFrame中按每5年计算各列平均值?

R语言:按每5年划分计算DataFrame列的平均值

核心步骤

  • 将字符串格式的日期转换为标准日期类型,提取年份信息;
  • 根据需求定义5年区间的分组规则;
  • 按分组对目标列计算平均值。

完整实现代码

# 加载依赖包
library(dplyr)
library(lubridate)

# 示例数据
data <- data.frame(
  date = c('01-01-2011', '04-05-2011', '02-09-2021', '11-11-2011'),
  va1 = c(34,56,78,32),
  va2 = c(34,56,78,32)
)

# 数据处理与分组计算
data_processed <- data %>%
  # 转换日期格式(日-月-年)
  mutate(date = dmy(date),
         year = year(date),
         # 生成5年区间的截止年份,比如2011年归入2015年截止的区间
         five_year_end = ceiling(year / 5) * 5) %>%
  # 按5年截止年份分组,计算各列平均值
  group_by(five_year_end) %>%
  summarise(across(c(va1, va2), mean, na.rm = TRUE))

# 输出结果
print(data_processed)

自定义分组逻辑(匹配你示例中的需求)

如果需要计算以某年份为终点的过去5年平均值(比如1995年对应1990-1995区间,2000年对应1995-2000区间),可调整分组规则:

# 针对1990-2010区间的定制处理
data_custom <- data %>%
  mutate(date = dmy(date),
         year = year(date),
         # 生成符合需求的5年终点年份
         five_year_end = ifelse(year >= 1990, ceiling(year / 5) * 5, NA)) %>%
  # 过滤目标区间内的分组
  filter(five_year_end %in% c(1995, 2000, 2005, 2010)) %>%
  group_by(five_year_end) %>%
  summarise(across(c(va1, va2), mean, na.rm = TRUE))

print(data_custom)

关键注意点

  • 日期转换要匹配格式:如果你的日期是月-日-年,请改用mdy()函数;
  • na.rm = TRUE用于跳过缺失值,若数据无缺失可省略;
  • 可根据实际数据的年份范围,调整分组的起始和结束年份。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:15:50