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

如何在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实现

无需额外安装包,用基础函数即可完成:

  1. 将字符型日期转换为R标准日期格式
  2. 提取MM/DD格式的日维度标识
  3. 用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包:

  1. 安装并加载所需包(首次使用时运行安装代码)
  2. 转换日期格式,提取月日组合
  3. 分组后汇总计算三个统计量
# 首次使用时安装包
# 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:15:45