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.

Tags:

R

Na

Raster