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

如何基于多年份RasterBrick计算逐月平均降水量?

批量计算多年份RasterBrick的逐月平均降水量

方法一:分月份提取后计算均值

  1. 收集所有目标RasterBrick对象
    先把所有以mnthly.sum.开头的年份RasterBrick存入列表,避免逐个手动输入:

    # 匹配所有格式为mnthly.sum.XXXX(XXXX为4位年份)的对象名
    brick_names <- ls(pattern = "^mnthly.sum\\.\\d{4}$")
    # 将这些对象加载到列表中
    brick_list <- mget(brick_names)
    
  2. 按月份提取并合并对应图层
    循环12个月份,把所有年份的同一月份图层合并为单独的RasterStack:

    monthly_stacks <- lapply(1:12, function(month) {
      do.call(stack, lapply(brick_list, function(brick) brick[[month]]))
    })
    
  3. 计算逐月逐像元均值并合并
    对每个月份的Stack计算均值,再组合成最终的12层RasterBrick:

    monthly_avg_brick <- brick(lapply(monthly_stacks, mean))
    # 给图层命名,方便区分
    names(monthly_avg_brick) <- paste0("avg_", c("jan", "feb", "mar", "apr", "may", "jun", 
                                                 "jul", "aug", "sep", "oct", "nov", "dec"))
    

方法二:用stackApply高效计算(推荐大数据量场景)

如果你的数据量较大,直接合并后用stackApply按分组计算更高效,还能自动处理分块运算节省内存:

# 合并所有年份的RasterBrick为一个大Stack
all_monthly_data <- do.call(stack, brick_list)
# 创建分组索引:每个年份的12个月对应1-12的重复序列
group_idx <- rep(1:12, length(brick_list))
# 按分组(月份)计算逐像元均值
monthly_avg_brick <- stackApply(all_monthly_data, indices = group_idx, fun = mean)
# 重命名图层
names(monthly_avg_brick) <- paste0("avg_", c("jan", "feb", "mar", "apr", "may", "jun", 
                                             "jul", "aug", "sep", "oct", "nov", "dec"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:42:14