How to Replace Raster Values Less than 0 to NA in R code
With the raster
package, the memory-safe way to do this is to use reclassify
or clamp
library(raster)
r <- raster(ncol=10, nrow=10)
values(r) <- rnorm(100)
x <- clamp(r, useValues=FALSE)
y <- reclassify(r, cbind(-Inf, 0, NA), right=FALSE)
Note the right=FALSE
to not set cells that are zero to NA
.
These methods are memory-safe and you can also provide a filename argument so that you do not need to call writeRaster
afterwards.
raster::clamp
is an easy and flexible way to do this. One can set everything above and/or below threshold values to that threshold, or by setting useValues=FALSE
then values above/below are set to NA
. For example, lower values only:
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
upper values only:
x <- clamp(r, upper=6, useValues=FALSE)
values(x)
# [1] 1 2 3 4 5 6 NA NA NA
and both upper and lower values:
x <- clamp(r, lower=3, upper=6, useValues=FALSE)
values(x)
# [1] NA NA 3 4 5 6 NA NA NA
Note the difference if useValues=TRUE
(the default):
x <- clamp(r, lower=3, upper=6)
values(x)
# [1] 3 3 3 4 5 6 6 6 6
Using raster_2.8-19
in this example.
library(raster)
values(pb1)[values(pb1) < 0] = NA
Or, as suggested by @jbaums:
pb1[pb1 < 0] <- NA
If you want to keep the original raster object, remember to assign the original raster to a new object name before running the code above.