如何在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
相关产品推荐
相关产品推荐

