使用spdplyr对空间数据执行group_by分组操作未生效如何解决?
问题原因
- sp类空间数据的geometry为S4类型结构,spdplyr封装的
group_by默认无法直接对该类型列执行聚合判断,同时你原有代码中summarise未指定空间聚合函数,仅直接调用geometry列不会自动完成合并,因此分组不生效。
解决方案
方案1:转换为sf对象(推荐,适配tidyverse语法)
sf是当前R生态主流的空间数据格式,原生支持dplyr的分组、去重操作:
- 先将sp对象转为sf对象
library(sf) datos_sf <- st_as_sf(datos_esp1)
- 按需执行去重/分组:
- 直接删除所有列完全重复的行:
datos_sf_limpios <- datos_sf |> distinct(.keep_all = TRUE)
- 按城市名分组,保留每个城市唯一的几何边界:
datos_sf_agrupado <- datos_sf |> group_by(nombre_alcaldia) |> summarise(geometry = st_union(geometry), .groups = "drop")
如果同一个城市的所有重复行几何完全一致,st_union会直接返回单个多边形,自动完成去重。
方案2:保留sp对象格式直接去重
如果不需要后续tidyverse操作,可直接使用sp包自带的去重函数:
library(sp) datos_limpios <- remove.duplicates(datos_esp1)
内容的提问来源于stack exchange,提问作者Jorge Hernández
相关产品推荐
相关产品推荐

