如何在R语言中按日期日维度计算多年份数据的最值与均值?
在R中按无年份的日维度聚合多年份数据的统计值
假设你有如下包含多年份日期和数值的数据集:
df <- data.frame( Date = c("1999/01/01", "1999/01/02", "2000/01/01", "2000/01/02", "2001/01/01", "2001/01/02"), Value = c(1.2, 2, 1, 3, 2, 3) )
目标是按MM/DD格式的日维度(忽略年份),计算每个日期对应的数值最小值、最大值和均值,最终得到如下结果:
Day Min Max Mean 1 01/01 1 2 1.4000000 2 01/02 2 3 2.6666667
方法一:基础R实现
无需额外安装包,用基础函数即可完成:
- 将字符型日期转换为R标准日期格式
- 提取
MM/DD格式的日维度标识 - 用
aggregate函数分组计算统计量
# 转换日期格式并提取月日 df$Day <- format(as.Date(df$Date, format = "%Y/%m/%d"), "%m/%d") # 分组计算min、max、mean result <- aggregate(Value ~ Day, data = df, FUN = function(x) { c(Min = min(x), Max = max(x), Mean = mean(x)) }) # 整理为规整表格 result <- do.call(data.frame, result) colnames(result) <- c("Day", "Min", "Max", "Mean") # 查看结果 print(result)
方法二:tidyverse工具链实现
如果习惯用更直观的tidy语法,可以结合dplyr和lubridate包:
- 安装并加载所需包(首次使用时运行安装代码)
- 转换日期格式,提取月日组合
- 分组后汇总计算三个统计量
# 首次使用时安装包 # install.packages(c("dplyr", "lubridate")) # 加载包 library(dplyr) library(lubridate) # 处理数据 result <- df %>% mutate(Date = ymd(Date)) %>% mutate(Day = format(Date, "%m/%d")) %>% group_by(Day) %>% summarize( Min = min(Value), Max = max(Value), Mean = round(mean(Value), 2) # 保留两位小数匹配示例输出 ) %>% ungroup() # 查看结果 print(result)
内容的提问来源于stack exchange,提问作者confusedindividual
相关产品推荐
相关产品推荐

