如何使用R将源索引转为包含索引、START_X、START_Y的向量数据列
问题解决方法
报错根源
- 变量名混用:读取的GDB对象命名为
ljz,后续代码中多次使用未定义的network变量,取值逻辑异常 - 标识符冲突:提前将
df定义为数据框对象,后续代码中将df作为函数调用,R无法识别调用逻辑,触发参数缺失报错 - 空间转换语法错误:
st_sfc为sf包专属的几何列创建函数,传入参数格式不符合要求,且未提前加载sf包依赖
正确操作流程
1. 修正依赖加载与数据读取
优先使用sf包替代已停止维护的rgdal/sp处理矢量数据,语法更简洁:
# 加载sf依赖包 library(sf) # 读取GDB数据 ljz <- st_read("ljz_network.gdb") # 查看读取到的字段与结构 head(ljz)
读取后ljz本身就是标准空间矢量对象,无需额外做格式转换。
2. 生成ID与目标向量列
直接在原空间对象上新增字段即可:
# 生成向量型ID列 ljz$ID <- 1:nrow(ljz) # 构造包含索引、START_X、START_Y的source_index向量列,每个元素为长度3的向量 ljz$source_index <- mapply(function(id, x, y) c(id, x, y), ljz$ID, ljz$START_X, ljz$START_Y, SIMPLIFY = FALSE)
3. 校验结果
# 查看source_index列的类型,确认是vector格式 class(ljz$source_index[[1]]) # 查看空间对象属性 st_geometry_type(ljz)
内容的提问来源于stack exchange,提问作者Det.D Joker
相关产品推荐
相关产品推荐

