在R中导出Shapefile至CSV结构异常,删除Geometry列无效怎么办?
解决Shapefile导出指定列至CSV的问题
你用select删不掉geometry列,核心原因是grid是sf类对象(读取Shapefile得到的默认类型),sf对象会强制保留geometry列作为空间属性,普通的select没法彻底剥离它。以下是几种实用的解决方法:
方法1:用sf自带工具移除空间属性(推荐)
st_drop_geometry()是sf包专门用来移除空间列的函数,能直接把sf对象转成普通数据框:
library(sf) library(dplyr) # 移除geometry列并保留目标字段 grid_clean <- grid %>% st_drop_geometry() %>% select(gid, rud) # 导出CSV(记得关闭行名避免多余列) write.csv(grid_clean, "path/grid_rud.csv", row.names = FALSE)
方法2:强制转为普通数据框后筛选
把sf对象转成普通data.frame,此时geometry列会变成文本格式,再直接筛选需要的列:
grid_df <- as.data.frame(grid) %>% select(gid, rud) write.csv(grid_df, "path/grid_rud.csv", row.names = FALSE)
方法3:导出时直接指定列(简化写法)
不用提前修改对象,直接在导出步骤里指定目标列,同时转成普通数据框避免geometry干扰:
write.csv(as.data.frame(grid)[, c("gid", "rud")], "path/grid_rud.csv", row.names = FALSE)
内容的提问来源于stack exchange,提问作者OgeiD
相关产品推荐
相关产品推荐

