如何将含多组sfc_POINT的sf数据框转为单一几何列?
解决sf数据框合并后多几何列/残留分组的问题
核心问题原因
dplyr::ungroup()仅能清除数据框层面的分组标记,但sf的sfc_POINT几何列本身可能携带了group_by()操作附加的分组属性,这部分不会被ungroup()处理,最终导致合并后出现多几何列或异常分组残留。
具体解决步骤
重置几何列的分组属性
用sf::st_geometry()重新提取几何,直接清除sfc内部的分组信息:# 清除geometry列的内置分组属性 yo$geometry <- sf::st_geometry(yo$geometry)识别并清理多余几何列
先筛选出所有几何类型的列,仅保留其中一个:# 找出所有几何列 geo_columns <- names(yo)[sapply(yo, function(col) inherits(col, "sfc"))] # 保留第一个几何列,删除其余 yo <- yo %>% dplyr::select(-dplyr::all_of(geo_columns[-1]))重建合法sf对象(可选)
如果处理后数据框丢失了sf属性,重新转换为标准sf对象:yo <- sf::st_sf(yo)
预防方案(合并前处理)
从源头避免问题,合并前确保两个原始sf数据框都只有一个几何列:
# 为每个原始数据框指定唯一几何列 df1 <- df1 %>% sf::st_set_geometry("geometry") df2 <- df2 %>% sf::st_set_geometry("geometry") # 合并数据框 yo <- dplyr::bind_rows(df1, df2)
内容的提问来源于stack exchange,提问作者Peter Mumford
相关产品推荐
相关产品推荐

