Reputation: 4090
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<- ???
Upvotes: 4
Views: 172
Reputation: 121568
Using duplicated
:
values(rc)[!duplicated(values(rc)) & !duplicated(values(rc),fromLast=T)] <- NA
Upvotes: 3