You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SF包实现空间联合并按几何图形分组聚合?

解决sf空间联合后按均值聚合的问题

嘿,我来帮你搞定这个sf空间分析的小麻烦!你提到的st_join里的FUN参数确实已经被弃用了,所以得换个思路来实现你的需求,下面给你两种实用的解决方案:

方法一:先空间连接,再按目标多边形分组聚合

这和你预想的“先联合再分组”思路一致,但直接用geom分组容易出问题(空间对象的精度差异可能导致分组混乱),更稳妥的方式是给图层a的每个多边形加个唯一标识,再按这个标识分组:

  1. 给图层a添加唯一ID(如果本身没有的话):
a$poly_id <- seq(nrow(a))
  1. 执行空间相交连接,把a和b中相交的多边形匹配起来:
joined <- st_join(a, b, join = st_intersects)
  1. 用dplyr工具按ID分组,对需要的字段计算均值:
library(dplyr)
result <- joined %>%
  group_by(poly_id, geom) %>%  # 保留geom保证结果仍是sf对象
  summarize(across(where(is.numeric), mean, na.rm = TRUE), .groups = "drop")

要是只想对特定字段计算均值,把where(is.numeric)换成具体字段名就行,比如across(c(value1, value2), mean, na.rm = TRUE)。

方法二:用st_interpolate_aw直接做面积加权均值(按需选择)

如果你的需求是面积加权的均值(不是简单的取相交多边形的平均值),可以直接用st_interpolate_aw,它专门处理这种“小多边形属性聚合到大多边形”的场景:

result <- st_interpolate_aw(b["target_column"], a, extensive = FALSE)

这里target_column是你要计算均值的b图层字段,extensive = FALSE表示计算均值(如果要算总和就设为TRUE)。

关于直接按geom聚合的说明

你提到的aggregate(c, c$geom, mean)这种写法不太推荐,因为sf的geom是空间对象,微小的坐标精度差异就会导致分组错误,用唯一ID分组既稳定又高效,是更靠谱的选择。

内容的提问来源于stack exchange,提问作者Micael Salomon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:27:28