2017-10-13 7 views
0

J'ai un raster qui a plus de 50 bandes. Ce que je voudrais est de rechercher tout pixel == 0 dans la première bande du raster. Après, je voudrais définir tous ces pixels NA dans les autres bandes raster. Ainsi, je n'ai pas à faire la recherche de 0 encore 50+ fois. Voici mon exemple:Définir les pixels de la raster NA en fonction de leur emplacement

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

J'espère que je l'ai dit clairement mon besoin =)

Merci à l'avance, acclamations

Répondre

0

Pas besoin d'une boucle ici. Vous pouvez rechercher 0 dans toutes les couches à la fois:

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

Merci pour le commentaire, mais je suis toujours à la recherche à travers chaque groupe, non? – user28724

+0

Techniquement oui. Si vous voulez rechercher seulement la première couche, faites 'cl_input [[1]] [cl_input [[1]] == 0] <- NA'. Mais si vous voulez changer la valeur de 0-pixel à NA dans tous les calques, la méthode ci-dessus est la plus rapide – smoff

+0

Merci, alors je vais appliquer votre méthode comme suggéré. Je pensais juste qu'il pourrait y avoir un moyen d'utiliser l'emplacement. En tout cas, merci! – user28724

1

Vous pouvez utiliser la méthode mask; en utilisant la première couche comme masque, et en mettant la valeur mask à zéro.

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