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

R语言:如何对zoo降水时间序列计算月总和的月平均值?

解决方法:计算多年同月份降水总和的平均值

嘿,这个需求其实很常见,咱们可以基于你已经熟悉的hydroTSM工具,再结合分组统计来实现。下面给你两种实用的方法,选你顺手的来就行:

方法一:基于hydroTSM + base R

你已经知道用monthlyfunction可以得到每个月的降水总和,那接下来只需要把这些总和按**月份(1-12)**分组,再求每组的平均值就好:

library(hydroTSM)
library(zoo)

# 1. 先得到所有月份的降水总和序列(每个元素对应某一年某一月的总和)
monthly_sums <- monthlyfunction(data, sum, na.rm = TRUE)

# 2. 提取每个总和对应的月份(比如"01"代表1月)
month_groups <- format(index(monthly_sums), "%m")

# 3. 按月份分组,计算同月份多年总和的平均值
avg_monthly_total <- tapply(coredata(monthly_sums), INDEX = month_groups, FUN = mean, na.rm = TRUE)

# 输出结果(会得到1-12月各自的平均总和)
print(avg_monthly_total)

方法二:用tidyverse风格(更直观)

如果你习惯用dplyr这类工具,可以把zoo数据转成数据框,分步统计:

library(hydroTSM)
library(zoo)
library(dplyr)

# 1. 把zoo格式数据转成带日期列的数据框
precip_df <- data.frame(
  Date = index(data),
  Precipitation = coredata(data)
)

# 2. 分步计算:先算每年各月总和,再算同月份的平均总和
avg_monthly_total <- precip_df %>%
  # 提取年份和月份作为分组依据
  mutate(
    Year = format(Date, "%Y"),
    Month = format(Date, "%m")
  ) %>%
  # 按年+月分组,计算当月总和
  group_by(Year, Month) %>%
  summarise(Monthly_Sum = sum(Precipitation, na.rm = TRUE)) %>%
  # 再按月份分组,计算多年同月份的平均总和
  group_by(Month) %>%
  summarise(Avg_Monthly_Sum = mean(Monthly_Sum, na.rm = TRUE))

# 输出结果
print(avg_monthly_total)

两种方法的结果是一致的,你可以根据自己的代码习惯选择。本质都是先拿到每年每个月的降水总和,再对同一月份的所有总和求平均,完美匹配你要的“1月多年总和的平均值、2月多年总和的平均值...”这类需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:35:09