首页 > 解决方案 > 缩放栅格堆栈中的单个像元

问题描述

library(raster)
r <- raster(ncol=10, nrow=10)
s <- stack(lapply(1:5, function(i) setValues(r, runif(100, -1, 1))))

我想做两件事:

  1. 在每个栅格图层中用 NA 替换负值

  2. 使用该单元格跨 5 层的平均值和标准差来缩放每个单元格

    for(i in 1:5){
    
     s[[i]][s[[i]] < 0] <- NA
    }
    

对于第二个任务,我如何使用沿栅格层的平均值和标准差来缩放单个像元。例如,以下实现是否正确?

scale(s, center = TRUE, scale = TRUE)

我认为它正在做的是取一层,计算层均值和 sd,然后使用该均值和 sd 对每个单元格进行归一化。我想要的是使用 5 层的均值和 sd 对每个单元格进行归一化

标签: rscalerasterr-raster

解决方案


要用 NA 替换负值,您可以使用 reclassify

示例数据

library(raster)
r <- raster(ncol=10, nrow=10)
s <- stack(lapply(1:5, function(i) setValues(r, runif(100, -1, 1))))

解决方案

x <- reclassify(s, cbind(-Inf, 0, NA))

要将scale或类似功能应用于每个单元格,您可以使用calc

z <- calc(x, scale)

推荐阅读