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

如何用R terra函数计算SpatRaster的行/列均值?

用terra包计算SpatRaster的行/列均值

terra包内置了rowMeans()和colMeans()函数,专门用来计算SpatRaster的行或列均值,完美适配你的需求,处理NA也很方便。

示例代码

先创建测试用的SpatRaster,模拟你的数据场景:

library(terra)
# 创建4行3列的SpatRaster
r <- rast(nrow=4, ncol=3)
values(r) <- seq(1,12,1)
# 手动设置NA,模拟真实数据的缺失情况
values(r)[c(2,4,5)] <- NA

计算行均值

直接调用rowMeans(),指定na.rm=TRUE忽略NA值:

row_means <- rowMeans(r, na.rm=TRUE)
# 结果是一个长度等于栅格行数的向量
row_means

计算列均值

同理使用colMeans()函数:

col_means <- colMeans(r, na.rm=TRUE)
col_means

处理SpatRaster栈(多图层)

如果是包含多个图层的SpatRaster栈:

  • 默认情况下,rowMeans()/colMeans()会对每个图层分别计算行/列均值,返回的结果仍是SpatRaster,每个图层对应原图层的计算结果:
# 创建含2个图层的栈
r_stack <- c(r, r*2)
# 计算每个图层的行均值
row_means_stack <- rowMeans(r_stack, na.rm=TRUE)
  • 如果需要对每行/列的所有图层求均值(比如同一行位置上所有图层的平均值),可以用app()函数结合margin参数,逻辑和矩阵的apply一致:
# 按行计算所有图层的均值(忽略NA)
row_mean_all_layers <- app(r_stack, function(x) mean(x, na.rm=TRUE), margin=1)
# 按列计算所有图层的均值
col_mean_all_layers <- app(r_stack, function(x) mean(x, na.rm=TRUE), margin=2)

验证结果一致性

你可以把SpatRaster转成矩阵,和你原来的处理方法对比结果:

r_matrix <- as.matrix(r)
matrix_row_means <- apply(r_matrix, 1, mean, na.rm=TRUE)
# 验证结果完全一致
all.equal(row_means, matrix_row_means)

计算得到的行/列均值向量可以直接用来制作Hovmoller图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:53:17