2017-10-13 166 views
0

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

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

我希望我说了我需要明确=)

由于提前, 欢呼

回答

0

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

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

感谢您的评论,但我仍在搜索每一个乐队,对吧? – user28724

+0

技术上是。如果只想搜索第一层,请执行cl_input [[1]] [cl_input [[1]] == 0] < - NA'。但是,如果您想要将所有图层中0像素的值更改为NA,则上面的方法是最快的 – smoff

+0

谢谢smoff,那么我将按照建议应用您的方法。我只是觉得可能有一种方法来使用该位置。无论如何,谢谢! – user28724

1

可以使用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