R语言:将sfc数据框列表转为单geometry行sf对象遇重复列问题求助
问题分析与解决方案
问题根源
你的代码存在两处核心问题:
- 对已合并的sfc几何集合重复调用
st_sfc,导致所有多边形被打包成单个几何元素,而非每行对应一个独立几何 - 使用
cbind合并数据时,因对象类型不匹配触发了几何列重复的问题
修正后的代码
# 提取列表中的几何并合并为单个sfc对象 # 若reachable_nodes_for_pois_list[[i]][[1]]是sfc类型 polygons <- lapply(reachable_nodes_for_pois_list, function(x) x[[1]]) iso_polygons <- do.call(c, polygons) # 用c()合并sfc列表,rbind更适合sf对象 # 直接构造目标sf对象,避免cbind的潜在问题 amenity_isochrone <- sf::st_sf( nodeID = iso_points$nodeID, geometry = iso_polygons, crs = 27700 # 创建时直接指定坐标系,无需后续赋值 )
特殊情况处理
如果reachable_nodes_for_pois_list[[i]][[1]]是sf对象而非纯sfc,需要先提取几何列:
polygons <- lapply(reachable_nodes_for_pois_list, function(x) sf::st_geometry(x[[1]])) iso_polygons <- do.call(c, polygons)
关键说明
- 合并sfc列表用
do.call(c, polygons)是标准操作,rbind更适合合并sf数据框 - 直接在
st_sf中构造列并指定坐标系,比后续用cbind和st_crs<-更安全,能避免几何列重复 - 确保
iso_points$nodeID的长度与iso_polygons的几何数量一致,否则会出现行不匹配的问题
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

