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

R入门者求助:将每日气象数据按周平均聚合

嘿,刚入门R语言遇到这种聚合问题太正常了,我帮你捋清楚怎么搞定!

首先先把你的数据模拟成标准的数据框(方便后续测试):

weather_data <- data.frame(
  STN = c(235, 235),
  YYYYMMDD = c(20161231, 20161230),
  DDVEC = c(227, 227),
  FHVEC = c(70, 53),
  FG = c(70, 55),
  FHX = c(80, 60),
  FHN = c(60, 30),
  FXX = c(120, 90),
  FXXH = c(10, 6),
  TG = c(80, 52),
  TN = c(71, -10),
  TX = c(87, 73),
  T10N = c(69, -9),
  Weeknr = c(52, 52)
)

接下来给你两种常用的解决方案,都是新手友好的:

方案1:用dplyr包(语法直观,易读性高)

dplyr是R里处理数据的常用包,语法非常贴近自然语言,适合新手:

  1. 先安装并加载dplyr(如果还没装的话):
install.packages("dplyr")
library(dplyr)
  1. 执行分组聚合操作:
weekly_weather <- weather_data %>%
  # 按【测量地点(STN) + 周数(Weeknr)】分组,避免不同地点的同周数据混算
  group_by(STN, Weeknr) %>%
  # 对除STN外的所有列计算平均值,na.rm=TRUE用来忽略缺失值
  summarise(across(-STN, mean, na.rm = TRUE)) %>%
  # 取消分组,方便后续操作
  ungroup()

方案2:用base R(无需额外安装包)

如果你不想装新包,用R自带的aggregate函数也能搞定:

weekly_weather_base <- aggregate(. ~ STN + Weeknr, data = weather_data, FUN = mean, na.rm = TRUE)

这里的. ~ STN + Weeknr意思是“所有列按照STN和Weeknr分组”,FUN指定用均值函数计算。

额外提醒:注意跨年份的周数问题

你提供的数据里2016年最后两天属于第52周,如果2017年的前几天也属于第52周,直接按Weeknr分组会把两年的数据混在一起。如果需要区分不同年份的同周数,可以先创建一个“年份-周数”的组合列:

weather_data <- weather_data %>%
  mutate(
    # 从YYYYMMDD里提取年份
    Year = substr(YYYYMMDD, 1, 4),
    # 组合成年份-周数的格式
    Year_Week = paste(Year, Weeknr, sep = "_")
  ) %>%
  # 按STN和Year_Week分组聚合
  group_by(STN, Year_Week) %>%
  summarise(across(-c(STN, Year, Year_Week), mean, na.rm = TRUE)) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:09:57