缩放栅格堆栈中的单个像元
scale individual cell in a raster stack
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 层的均值和标准差
要用 NA 替换负值,您可以使用重新分类
示例数据
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)
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 层的均值和标准差
要用 NA 替换负值,您可以使用重新分类
示例数据
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)