问题描述
library(raster)
r <- raster(ncol=10,nrow=10)
s <- stack(lapply(1:5,function(i) setValues(r,runif(100,-1,1))))
我想做两件事:
-
在每个栅格层中用 NA 替换负值
-
使用该单元格跨 5 层的均值和标准差缩放每个单元格
for(i in 1:5){ s[[i]][s[[i]] < 0] <- NA }
对于第二个任务,我如何使用其均值和标准差来缩放单个单元格 沿着栅格层。例如以下实现是否正确?
scale(s,center = TRUE,scale = TRUE)
我认为它正在做的是取一个层,计算层的均值和标准差,然后 通过使用此均值和 sd 对每个单元格进行归一化。我想要的是正常化 每个单元格在 5 层中使用其均值和 sd
解决方法
请单独提问。要用 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,NA))
要将 scale
或类似函数应用于每个单元格,您可以使用 calc
z <- calc(x,scale)