You need to enable JavaScript to run this app. R语言中如何按水文年分别计算多站点逐日气温的年平均值
优惠活动
大模型
产品
解决方案
定价
更多

R语言中如何按水文年分别计算多站点逐日气温的年平均值

现有数据集基础

你手头的逐日气温时间序列存储结构如下:
初始R语言数据框定义代码:

df <- data.frame(
  Date = c("01/01/1950", "01/02/1950", "12/31/1975"),
  MeanTempStn1 = c(13, 4.6, 9.8),
  MeanTempStn2 = c(9.5, 3.8, 8.2),
  MeanTempStn3 = c(10.8, 6.7, 5.5)
)

对应结构化字段内容:

DateMeanTempStn1MeanTempStn2MeanTempStn3
01/01/195013.09.510.8
01/02/19504.63.86.7
...
12/31/19759.88.25.5
核心需求

你已经掌握通过hydroSTM包计算站点日历年平均气温的方法,本次需要调整统计规则:按照水文年划分标准(每个水文年从当年9月1日起始,到次年8月31日结束,例如1976水文年的覆盖周期为1975年9月1日至1976年8月31日),逐站点计算对应水文年的年平均气温。

R语言实现步骤
  1. 转换日期格式
    原始Date列是字符串形式的月/日/年格式,需要先转为R可识别的日期类型,才能提取年月字段做后续划分:
    # %m对应两位月份、%d对应两位日期、%Y对应四位年份
    df$Date <- as.Date(df$Date, format = "%m/%d/%Y")
    
  2. 标记每条数据对应的水文年
    按照水文年规则给每一条逐日气温记录分配对应水文年标签:日期落在每年9-12月的,归属的水文年为日期年份+1;日期落在每年1-8月的,归属的水文年为日期本身的年份。
    用时间处理包lubridate完成字段提取和标签匹配:
    library(lubridate)
    # 匹配水文年标签
    df$hydrological_year <- ifelse(
      month(df$Date) >= 9,
      year(df$Date) + 1,
      year(df$Date)
    )
    
  3. 分组计算各站点水文年平均气温
    按照水文年标签分组,逐站点计算组内所有有效气温值的平均值即可,不需要额外调用hydroSTM的日历年计算逻辑:
    library(dplyr)
    hydrological_year_mean <- df %>%
      group_by(hydrological_year) %>%
      # na.rm = T表示计算时自动忽略缺失的气温值
      summarise(
        MeanTempStn1 = mean(MeanTempStn1, na.rm = T),
        MeanTempStn2 = mean(MeanTempStn2, na.rm = T),
        MeanTempStn3 = mean(MeanTempStn3, na.rm = T)
      )
    

注意:计算前可以提前检查数据集的日期连续性,若存在缺测日期,建议先补全完整的逐日时间范围再做分组统计,避免缺测导致平均值代表性不足。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 12:15:01