如何用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
相关产品推荐
相关产品推荐

