临时移除sf对象几何后,如何在dplyr操作后恢复点几何?
恢复sf数据几何信息的方法
要恢复处理后数据的点几何信息,核心是利用原sf数据保留的几何列,和处理后的new_df做关联匹配,具体分两种情况操作:
情况一:new_df和原df行数、顺序完全一致(无行增删)
如果你的dplyr操作只是修改列值、排序但没增加/删除行,可以直接把原几何列加回去再转成sf对象:
# 先取消分组避免干扰,添加原几何列后转成sf restored_sf_df <- new_df %>% ungroup() %>% mutate(geometry = df %>% ungroup() %>% pull(geometry)) %>% st_as_sf() # 验证类型 class(restored_sf_df)
情况二:new_df有行增删或顺序变化
这种情况必须依赖唯一标识列(比如建筑物ID、编码)来匹配对应几何:
- 先从原sf数据中提取带标识列的几何信息
- 和处理后的
new_df合并,再转成sf对象
示例代码(假设唯一标识列为building_id):
# 提取原数据的标识列+几何列 original_geo_data <- df %>% ungroup() %>% select(building_id, geometry) # 合并并恢复sf格式 restored_sf_df <- new_df %>% ungroup() %>% left_join(original_geo_data, by = "building_id") %>% st_as_sf()
注意事项
- 必须确保唯一标识列在原df和new_df中都存在,且能一一对应
- 如果后续需要分组,可以在恢复sf格式后重新用
group_by()设置分组
内容的提问来源于stack exchange,提问作者Xaviermoros
相关产品推荐
相关产品推荐

