2017-10-13 175 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