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

使用R中sf包的summarize函数融合多边形边界报错的解决方法

解决sf包summarize融合多边形边界报错的问题

错误原因

你遇到的问题是因为加州的国会选区几何存在不连通的部分(比如飞地或离岛选区),直接用dplyr::summarize()处理时,sf默认的几何合并行为会生成2个独立的几何对象,但group_by(STATENAME)后每组仅对应1行数据,几何列的行数与现有数据行数不匹配,从而触发报错。而阿拉巴马州的选区是完全连通的,合并后只会生成1个几何对象,所以能正常运行。

解决方案

需要明确使用st_union()函数来合并几何,确保生成单一的复合几何对象(MULTIPOLYGON),与分组后的行数匹配。以下是两种可行的代码写法:

写法1:用list()包裹合并后的几何

dfs <- st_read('D:/Data/districts080.shp') %>% 
  select(STATENAME, DISTRICT) %>% 
  filter(STATENAME == 'California') %>% 
  group_by(STATENAME) %>% 
  summarize(geom = list(st_union(geometry))) %>% 
  st_sf()

写法2:直接指定几何列合并,添加.groups参数清理分组

dfs <- st_read('D:/Data/districts080.shp') %>% 
  select(STATENAME, DISTRICT) %>% 
  filter(STATENAME == 'California') %>% 
  group_by(STATENAME) %>% 
  summarize(geometry = st_union(geometry), .groups = "drop")

说明

  • st_union()会将多个多边形合并为一个MULTIPOLYGON类型的几何,即使原始几何不连通,也会被打包成单一的几何对象,保证与分组后的1行数据匹配。
  • .groups = "drop"参数用于清理分组状态,避免后续操作出现不必要的分组残留问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:20:25