如何基于多年份RasterBrick计算逐月平均降水量?
批量计算多年份RasterBrick的逐月平均降水量
方法一:分月份提取后计算均值
收集所有目标RasterBrick对象
先把所有以mnthly.sum.开头的年份RasterBrick存入列表,避免逐个手动输入:# 匹配所有格式为mnthly.sum.XXXX(XXXX为4位年份)的对象名 brick_names <- ls(pattern = "^mnthly.sum\\.\\d{4}$") # 将这些对象加载到列表中 brick_list <- mget(brick_names)按月份提取并合并对应图层
循环12个月份,把所有年份的同一月份图层合并为单独的RasterStack:monthly_stacks <- lapply(1:12, function(month) { do.call(stack, lapply(brick_list, function(brick) brick[[month]])) })计算逐月逐像元均值并合并
对每个月份的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
相关产品推荐
相关产品推荐

