如何在R中基于RasterLayer值筛选RasterBrick并计算均值?
解决方案
你可以直接用raster包的calc()函数完成这个任务,不需要额外生成中间布尔砖或转数据框,效率更高:
# 逐像元处理时间序列数据 mean_filtered <- calc(m, function(x) { # 计算当前像元所有图层的均值 pixel_mean <- mean(x, na.rm = TRUE) # 筛选出大于均值的值,再计算这些值的均值 mean(x[x > pixel_mean], na.rm = TRUE) })
如果需要先保留筛选后的完整RasterBrick再计算均值,也可以用掩码方式实现:
# 将小于等于均值的像元设为NA,得到筛选后的RasterBrick m_filtered <- m m_filtered[m <= mean_m] <- NA # 计算筛选后砖的均值 mean_filtered <- mean(m_filtered, na.rm = TRUE)
你之前的方法为什么无效?
m[[c]]的用法是错误的,因为[[是用来索引Raster对象的图层的,而非筛选像元值。c是和m同维度的布尔值RasterBrick,无法作为图层索引使用。
内容的提问来源于stack exchange,提问作者Francesco Giardina
相关产品推荐
相关产品推荐

