如何根据 R 中的相邻多边形填充缺失值?
How to fill missing values based on neighboring polygons in R?
假设以下数据集并添加一些缺失值(仅用于说明):
library(dplyr)
library(sf)
demo(nc, ask = FALSE, verbose = FALSE)
nc$AREA[c(30, 45)] <- NA
我可以获得每个县的所有相邻多边形:
nc %>% mutate(
INTERSECT = purrr::map(.x = geometry, .f = st_intersects, y = st_geometry(nc))
)
这为我提供了每行邻近县的索引列表。现在我想用相邻多边形的平均面积来填充缺失的面积值。我将如何使用这些索引对相应的行取平均值?
index <- st_touches(nc, nc)
output <- nc %>%
mutate(AREA = ifelse(is.na(AREA),
apply(index, 1, function(i){mean(.$AREA[i])}),
AREA))
output$AREA[c(30, 45)]
[1] 0.1510 0.1335
检查答案:
两个多边形邻居的索引。
index[c(30, 45)]
[[1]]
[1] 13 14 29 37 48
[[2]]
[1] 44 87
手动查找区域。
mean(output$AREA[index[[30]]])
[1] 0.151
mean(output$AREA[index[[45]]])
[1] 0.1335
假设以下数据集并添加一些缺失值(仅用于说明):
library(dplyr)
library(sf)
demo(nc, ask = FALSE, verbose = FALSE)
nc$AREA[c(30, 45)] <- NA
我可以获得每个县的所有相邻多边形:
nc %>% mutate(
INTERSECT = purrr::map(.x = geometry, .f = st_intersects, y = st_geometry(nc))
)
这为我提供了每行邻近县的索引列表。现在我想用相邻多边形的平均面积来填充缺失的面积值。我将如何使用这些索引对相应的行取平均值?
index <- st_touches(nc, nc)
output <- nc %>%
mutate(AREA = ifelse(is.na(AREA),
apply(index, 1, function(i){mean(.$AREA[i])}),
AREA))
output$AREA[c(30, 45)]
[1] 0.1510 0.1335
检查答案:
两个多边形邻居的索引。
index[c(30, 45)]
[[1]]
[1] 13 14 29 37 48
[[2]]
[1] 44 87
手动查找区域。
mean(output$AREA[index[[30]]])
[1] 0.151
mean(output$AREA[index[[45]]])
[1] 0.1335