How to replace NA's in a raster object
18,446
Solution 1
I'm not sure it makes sense to remove NA
values from a raster
object, but you can easily replace it.
For example:
oldpar <- par(mfrow=c(1, 2))
plot(r)
r[is.na(r)] <- 250
plot(r)
par(oldpar)
If you really want to, you can extract the raster values into a vector and then remove the NA
values. (Although, since you lose the spatial information, I can't see how this can be helpful.)
r <- raster(filename)
r <- values(r)
head(r)
[1] NA NA NA NA NA NA
head(na.omit(r))
[1] 633.686 712.545 654.162 604.442 857.256 755.506
Solution 2
A more memory safe approach (for large files) would be to use reclassify:
library(raster)
filename <- system.file("external/test.grd", package="raster")
r <- raster(filename)
rna <- reclassify(r, cbind(NA, 250))
And here are three ways in which you can do this with terra
library(terra)
f <- system.file("ex/elev.tif", package="terra")
r <- rast(f)
x <- classify(r, cbind(NA, -99))
y <- subst(r, NA, -99)
z <- ifel(is.na(r), -99, r)
Author by
ils
Love wasps, study beetles, learn statistics. Constantly progressing.
Updated on June 15, 2022Comments
-
ils almost 2 years
I need to replace the
NA
's in the raster object (r
) from the example below.library(raster) filename <- system.file("external/test.grd", package="raster") r <- raster(filename)
I also tried to remove these these (and place the result in a
data.frame
), but to no avail.dfr <- as.data.frame(r, na.rm=T) summary(dfr) # test # Min. : 128.4 # 1st Qu.: 293.2 # Median : 371.4 # Mean : 423.2 # 3rd Qu.: 499.8 # Max. :1805.8 # NA's :6097
-
kennyB about 8 yearsThis doesn't seem to work for NaN (i.e. reclassify(r, cbind(NaN, NA)))