给定的是初始栅格
r <- raster(ncol=10, nrow=10)
values(r) <- c(1,1,2,1,1,1,1,1,3,3, 1,1,1,1,1,1,1,3,3,3, 1,1,1,1,1,3,3,3,3,3, 1,1,1,2,2,3,3,3,3,3, 1,2,2,2,2,3,3,2,3,3, 3,2,2,2,2,3,3,3,3,1, 2,2,2,2,2,2,3,2,3,1, 2,2,2,3,3,3,3,3,3,3, 2,3,3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,3,1)
plot(r)
团块中有几个“岛”。我正在寻找的是一种将这个孤立像素添加到主要周围类的方法。以便我收到以下栅格:
r1 <- raster(ncol=10, nrow=10)
values(r1) <- c(1,1,1,1,1,1,1,1,3,3, 1,1,1,1,1,1,1,3,3,3, 1,1,1,1,1,3,3,3,3,3, 1,1,1,2,2,3,3,3,3,3, 1,2,2,2,2,3,3,3,3,3, 2,2,2,2,2,3,3,3,3,3, 2,2,2,2,2,2,3,3,3,3, 2,2,2,3,3,3,3,3,3,3, 2,3,3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,3,3)
plot(r1)
孤立的像素被添加到主导的周围类中,但如果至少一个相邻的单元具有相同的值,则仍然存在。
如何实现这个结果?
答案 0 :(得分:1)
您可以将 focal
与自定义函数参数一起使用。类似于下面的内容。
f <- function(i) {
if (is.na(i[5])) return(NA)
s <- sum(i[5] == i, na.rm=TRUE)
if (s == 1) {
b <- table(i)
m <- max(b, na.rm=TRUE)
if (m > 1) {
b <- as.numeric( names(which.max(b)[1]) )
return(b)
}
}
i[5]
}
您的示例数据如下,但请注意,我更改了一个值以使其与您的绘图 (r[3,6]
) 相匹配,并且我将范围设置为 c(0,1,0,1)
以避免拥有全局经纬度数据 - - 这可能会令人困惑,因为然后连接最左侧和最右侧的单元格,并且您会得到一个单元格的不同结果。您还可以指定平面 CRS。
library(raster)
r <- raster(ncol=10, nrow=10, xmn=0, xmx=1, ymn=0, ymx=1)
values(r) <- c(1,1,2,1,1,1,1,1,3,3, 1,1,1,1,1,1,1,3,3,3, 1,1,1,1,1,2,3,3,3,3, 1,1,1,2,2,3,3,3,3,3, 1,2,2,2,2,3,3,2,3,3, 3,2,2,2,2,3,3,3,3,1, 2,2,2,2,2,2,3,2,3,1, 2,2,2,3,3,3,3,3,3,3, 2,3,3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,3,1)
plot(r)
rr <- focal(r, matrix(1,3,3), f, pad=TRUE)
plot(rr)
这与您为右下角的 2 个灰色单元格显示的内容不同,因为根据您指定的规则,您显示的内容不正确。这些单元格都具有相同值的邻居。