根据栅格位置设置栅格NA的像素

时间:2017-10-13 09:14:28

标签: r for-loop na r-raster

我有一个有50多个乐队的光栅。我想要的是在栅格的第一个波段内搜索所有像素== 0。下面我想在其他栅格波段中设置所有这些像素NA。因此,我不必再次搜索0次50次。这是我的例子:

cl_input <- brick("sometif")
for(i in 1:nlayers(cl_input)){
    print(names(cl_input[[i]]))
    cl_input[[i]][cl_input[[i]] == 0] <- NA   
}

我希望我明确表达了我的需要=)

提前致谢, 欢呼声

2 个答案:

答案 0 :(得分:2)

您可以使用mask方法;使用第一层作为掩码,并将maskvalue设置为零。

library(raster)
b <- brick(nrow=2, ncol=2, nl=3)
values(b) <- matrix(c(0,1,1),4,3)
values(b)
##     layer.1 layer.2 layer.3
##[1,]       0       1       1
##[2,]       1       1       0
##[3,]       1       0       1
##[4,]       0       1       1

d <- mask(b, b[[1]],  maskvalue=0)
values(d)
##     layer.1 layer.2 layer.3
##[1,]      NA      NA      NA
##[2,]       1       1       0
##[3,]       1       0       1
##[4,]      NA      NA      NA

答案 1 :(得分:0)

这里不需要循环。您可以一次在所有图层中搜索0:

cl_input <- brick("sometif")
cl_input[cl_input == 0] <- NA