5 votes

Comment remplacer les valeurs Raster inférieures à 0 par NA en code R

Je travaille avec l'imagerie Landsat pour calculer le rayonnement net. Il y a des valeurs négatives très faibles (ex : -0.000003) qui se trouvent dans mes couches matricielles de réflectance converties. Je veux m'assurer que mes réflectances sont de 0 - 1 afin de réduire les erreurs dans mes futurs calculs.

Comment puis-je remplacer les valeurs matricielles inférieures à 0 par "NA" dans R. Similaire à une fonction de calcul matricielle. Je ne sais pas comment fournir un exemple, mais je suis certain que l'un d'entre vous pourrait m'aider, oui ?

Voici mon équation pour la réflectivité dérivée de Bastiaanssen et al. (1998)

En supposant que pb1 indique la réflectance pour la bande 1 de Landsat, pi = 3,14..., lb1 = radiance pour la bande 1, ESUN = valeur exoatmosphérique pour la bande 1, dr = la distance terre-soleil relative pour le jour de l'année.

#Calculate reflectivity per band. QC: Always 0 to 1
pb1 = (pi * lb1)/(ESUN1 * cos(solzen) * dr)

Après la création de ce raster, tout ce que je veux faire est de mettre les valeurs pb1 qui sont inférieures à 0 à NA.

Aide ?

9voto

Robert Hijmans Points 12165

Le moyen le plus sûr de le faire est d'utiliser la fonction reclassify

library(raster)
r <- raster(ncol=10, nrow=10)
values(r) <- rnorm(100)
x <- reclassify(r, cbind(-Inf, 0, NA), right=FALSE)

Notez le right=FALSE pour ne pas définir les valeurs de 0 à NA.

Un autre avantage de reclassify est que vous pouvez fournir un argument de nom de fichier.

7voto

eipi10 Points 3549
library(raster)

values(pb1)[values(pb1) < 0] = NA

Ou, comme suggéré par @jbaums :

pb1[pb1 < 0] <- NA

Si vous souhaitez conserver l'objet raster d'origine, n'oubliez pas de lui attribuer un nouveau nom d'objet avant d'exécuter le code ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X