r - 如何将孤立的栅格值添加到周围的类?
问题描述
给定的是一个初始栅格
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)
孤立的像素被添加到主要的周围类中,但如果至少一个相邻单元具有相同的值,则保留。
如何达到这个结果?
解决方案
您可以使用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 个灰色单元格显示的内容不同,因为根据您指定的规则,您显示的内容不正确。这些单元格都具有相同值的邻居。
推荐阅读
- python - 将 django 模型连接到具有相同结构的不同表名
- node.js - 如何在类验证器模式中传递映射参数
- hugo - 如何在 Hugo Academic 中更改关于页面的字幕
- datagridview - 删除记录时如何重置表的标识列?
- java - 如何打印每个数组元素?
- r - 如何在R中将字符串作为列名传递
- python - 是否可以运行只有 1 而没有 0 的 logit 模型?
- python - 如何将普通引号转换为Guillemets(法语引号),除了标签
- angular - auth0 身份验证后需要刷新页面才能在 Angular 中获取令牌和用户配置文件
- javascript - 无法从我的猫鼬模型中填充