Search code examples
rarcgis

Replace values occuring once in raster by NA


I have vector of values(generated from raster - Raster package - by function clump in R):

values(rc)

1 NA NA NA  2 NA  2  2 NA NA NA NA NA NA NA  2 NA  2  2 NA  2  2 NA NA NA
NA NA NA NA  2 NA NA NA NA NA  3 NA  4 NA  2 NA  2 NA  5 NA NA  3 NA NA  4
NA NA  2 NA NA NA NA NA NA NA NA  4 NA NA NA NA NA NA  6 NA  7 NA  4 NA NA
NA  8  8 NA  6  6 NA NA NA NA  4 NA NA NA NA NA NA NA NA  4  4  4 NA NA  9
NA NA NA NA 10 NA NA NA NA  4 NA  9  9 NA NA NA NA 10 NA NA NA  4 NA NA NA
9 NA NA NA NA NA NA NA NA NA 11 NA NA NA 12 NA NA NA NA

and I would like to find every value which occurs only once(so 1,5,11,10) and replace it by NA. What I would like to obtain:

values(replaced_rc)

NA NA NA NA  2 NA  2  2 NA NA NA NA NA NA NA  2 NA  2  2 NA  2  2 NA NA NA
NA NA NA NA  2 NA NA NA NA NA  3 NA  4 NA  2 NA  2 NA  NA NA NA  3 NA NA  4
NA NA  2 NA NA NA NA NA NA NA NA  4 NA NA NA NA NA NA  6 NA  NA NA  4 NA NA
NA  8  8 NA  6  6 NA NA NA NA  4 NA NA NA NA NA NA NA NA  4  4  4 NA NA  9
NA NA NA NA 10 NA NA NA NA  4 NA  9  9 NA NA NA NA 10 NA NA NA  4 NA NA NA
9 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

The problem is that I can easily identify raster patches by function clump. And I would like to exclude patches containing only pixel, similarly like function "sieve" in ENVI or ERDAS. Any help? Thanks a lot in advance.

Exemple from R:

library("raster")
r <- raster(ncols=12, nrows=12)
set.seed(0)
r[] <- round(runif(ncell(r))*0.7 )
plot(r)
rc <- clump(r)
replaced_rc<- ??? 

Solution

  • Using duplicated:

    values(rc)[!duplicated(values(rc)) & !duplicated(values(rc),fromLast=T)] <- NA