使用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
相关产品推荐
相关产品推荐

