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 raster 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 raster inférieures à 0 par "NA" dans R. Similaire à une fonction de calcul raster. Je ne sais pas comment donner 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 le pb1 indique la réflectance pour la bande 1 de Landsat, pi = 3,14 ..., lb1 = rayonnement pour la bande 1, ESUN = valeur exoatmosphérique pour la bande 1, dr = la distance relative de la Terre au soleil pour le jour de l'année.
#Calculate reflectivity per band. QC: Always 0 to 1
pb1 = (pi * lb1)/(ESUN1 * cos(solzen) * dr)
Une fois ce raster créé, tout ce que je veux faire, c'est définir les valeurs pb1 inférieures à 0 sur NA.
Aidez-moi?
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 d'affecter le raster d'origine à un nouveau nom d'objet avant d'exécuter le code ci-dessus.
Pour ce faire, la méthode sans danger pour la mémoire consiste à utiliser reclassify
library(raster)
r <- raster(ncol=10, nrow=10)
values(r) <- rnorm(100)
x <- reclassify(r, cbind(-Inf, 0, NA), right=FALSE)
Noter la right=FALSE
pour ne pas définir des valeurs de 0 à NA.
Un autre avantage de reclassify
est que vous pouvez fournir un argument de nom de fichier.
raster::clamp
est un moyen simple et flexible de le faire. On peut tout régler au-dessus et/ou en dessous des valeurs de seuil à ce seuil, ou en définissant useValues=FALSE
puis les valeurs au-dessus/en dessous sont définies sur NA
. Par exemple, des valeurs inférieures uniquement:
r <- raster(ncol=3, nrow=3)
values(r) <- seq_len(9)
x <- clamp(r, lower=3, useValues=FALSE)
values(x)
# [1] NA NA 3 4 5 6 7 8 9
valeurs supérieures uniquement:
x <- clamp(r, upper=6, useValues=FALSE)
values(x)
# [1] 1 2 3 4 5 6 NA NA NA
et les valeurs supérieures et inférieures:
x <- clamp(r, lower=3, upper=6, useValues=FALSE)
values(x)
# [1] NA NA 3 4 5 6 NA NA NA
Notez la différence si useValues=TRUE
(le défaut):
x <- clamp(r, lower=3, upper=6)
values(x)
# [1] 3 3 3 4 5 6 6 6 6
En utilisant raster_2.8-19
dans cet exemple.