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)

enter image description here


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)
Share:
18,446
ils
Author by

ils

Love wasps, study beetles, learn statistics. Constantly progressing.

Updated on June 15, 2022

Comments

  • ils
    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
    kennyB about 8 years
    This doesn't seem to work for NaN (i.e. reclassify(r, cbind(NaN, NA)))