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

如何用dplyr汇总逐日气温年平均及实现地表温序列聚合?

使用dplyr处理地表温度时间序列聚合与年平均计算

当然可以!dplyr(配合tidyr)完全能满足你对地表温度时间序列的快速聚合需求,尤其适合你这种从E-OBS栅格转换来的表格型时间序列数据。下面我会一步步教你如何处理你的数据并计算年平均气温:

第一步:准备数据(宽格式转长格式)

你的数据目前是宽格式(每行是一个网格点,每列是一个日期的温度值),而dplyr处理时间序列聚合时,长格式(每行是一个网格点+一个日期的温度记录)会更方便。我们可以用tidyr::pivot_longer()来转换:

# 加载需要的包
library(dplyr)
library(tidyr)
library(lubridate) # 用于日期处理

# 假设你的数据集名为temp_data,包含lat, lon和所有日期列
long_temp_data <- temp_data %>%
  # 将所有日期列(除了lat和lon)转换为长格式
  pivot_longer(
    cols = -c(lat, lon), # 排除地理坐标列
    names_to = "date",   # 新列名:日期
    values_to = "temperature" # 新列名:温度值
  ) %>%
  # 将date列转换为日期格式(假设列名是"YYYY-MM-DD"格式)
  mutate(date = ymd(date)) %>%
  # 提取年份,方便后续按年聚合
  mutate(year = year(date))

第二步:计算每个网格点的年平均气温

有了长格式数据后,用dplyr的group_by()和summarize()就能轻松完成年平均的汇总:

annual_mean_temp <- long_temp_data %>%
  # 按地理坐标和年份分组
  group_by(lat, lon, year) %>%
  # 计算每组的平均温度,na.rm=TRUE忽略缺失值
  summarize(
    annual_mean = mean(temperature, na.rm = TRUE),
    .groups = "drop" # 分组后取消分组状态,可选
  )

关于dplyr的聚合能力说明

dplyr提供的工具完全适配你的需求:

  • group_by():可以灵活按多个维度(这里是地理坐标+年份)分组,是聚合的核心基础
  • summarize():对每组数据计算汇总统计(均值、总和、中位数等),支持自定义函数
  • 配合tidyr的重塑函数,能快速处理宽/长格式转换,完美适配时间序列数据的结构
  • 语法简洁易读,而且处理大数据集时效率很高(尤其是配合dplyr的底层优化)

如果你的数据有缺失值,记得在mean()里加上na.rm=TRUE,避免结果出现NA。如果需要计算其他统计量(比如年最高温、最低温),只需要在summarize()里添加对应的函数即可,比如annual_max = max(temperature, na.rm = TRUE)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:41:06