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

如何将跨年度每日数据聚合为周均值?(R语言)

跨年度周均值计算的解决方案

当数据跨年度时,仅用week()函数提取周数会导致不同年份的同周数被错误聚合。解决这个问题的核心是给周数加上年份标识,确保每个分组唯一对应某一年的某一周,以下是三种实用方法:

方法1:使用lubridate::yearweek()(最简洁)

yearweek()函数会直接生成包含年份和周数的复合对象,天然避免跨年度混淆,直接用这个对象分组即可:

library(dplyr)
library(lubridate)

weekly_avg <- dta %>%
  group_by(week_group = yearweek(when)) %>%
  summarise(weekly_mean = mean(y)) %>%
  ungroup()

# 查看前几组结果
head(weekly_avg)

方法2:同时按年份和周数分组

手动提取年份和周数,将二者作为联合分组键,确保每个分组是「年份+周数」的唯一组合:

weekly_avg <- dta %>%
  mutate(
    year = year(when),
    week = week(when)
  ) %>%
  group_by(year, week) %>%
  summarise(weekly_mean = mean(y)) %>%
  ungroup()

# 查看跨年前后的分组结果
weekly_avg %>% filter(year %in% c(2021, 2022) & week %in% c(53, 1))

方法3:按周起始日期分组

用floor_date()将日期取整到每周的起始点(默认以周日为周起始,可通过week_start参数调整为周一),以起始日期作为分组依据,自然区分不同年份的周:

weekly_avg <- dta %>%
  group_by(week_start = floor_date(when, unit = "week", week_start = 1)) %>% # week_start=1指定周一为周起始
  summarise(weekly_mean = mean(y)) %>%
  ungroup()

# 查看跨年附近的周起始分组
weekly_avg %>% filter(week_start >= as.POSIXct("2021-12-26") & week_start <= as.POSIXct("2022-01-09"))

这三种方法都能解决跨年度周聚合的问题,可根据后续分析需求选择:

  • 若只需年份+周的标识,选yearweek()最便捷;
  • 若需要单独查看年份和周数,选「年份+周数」联合分组;
  • 若需保留具体日期信息用于时间序列可视化或分析,选按周起始日期分组。

内容的提问来源于stack exchange,提问作者riccardo-df

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:10:23