0

Assuming I would have a raster in R like :

r <- raster(ncols=10, nrows=10)
r[] <- sample(50, 100, replace=T)

How could I set the values between [10,30] for example to NA?

I tried values = r[r<= c(10,30)] = NA but this does not remove the values between 10 and 30.

Thanks in advance.

PhilG
  • 351
  • 1
  • 4
  • 15

2 Answers2

3

Using

r[r <= 10:30] <- NA

seems dangerous, and in fact it gives a warning:

Warning message: In getValues(e1) <= e2 : longer object length is not a multiple of shorter object length

It is also not memory-friendly for large rasters.

The proper/best way to do this is to use raster::reclassify:

r <- raster::reclassify(r, c(10, 30, NA))

, which is also much faster.

See also:

https://stackoverflow.com/a/49159943/6871135

lbusett
  • 5,801
  • 2
  • 24
  • 47
1

You have to find the values like this:

r[r>10 & r<30]<-NA 
r[]
  [1] NA 38 NA  1 NA NA  3 32 40 36 NA NA 30  5  2 38 47 NA 42 42  1 NA NA 32 43 NA  7 NA  8 35 NA NA NA 48 10
 [36] 32 49 33 NA 48 NA 37  2 45  9  7 37 42  2 42 NA  3 49 48 NA NA 48  5 NA 46 43 NA NA NA 42 39 41 NA 48 NA
 [71] NA NA 30 35 32 46  4 32 NA 48 40  2 44 45 NA NA NA  9 47 NA NA 41  2  4 42 30 NA 36 48 32
Terru_theTerror
  • 4,918
  • 2
  • 20
  • 39