如何根据 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