r - 使用 st_read 读取文件时选择列
问题描述
我正在尝试将 39 个 json 文件读入 R 中的一个通用 sf 数据集。
这是我一直在尝试的方法:
path <- "~/directory"
file.names <- as.list(dir(path, pattern='.json', full.names=T))
geodata <- do.call(rbind, lapply(file.names, st_read))
问题出在最后一行:rbind
无法工作,因为文件的列数不同。但是,它们都有三个共同的列,我关心的是MOVEMENT_ID
:DISPLAY_NAME
和geometry
。运行 st_read 时如何只选择这三列?
我试过运行geodata<-do.call(rbind, lapply(file.names, st_read,select=c('MOVEMENT_ID', 'DISPLAY_NAME', 'geometry')))
,但在这种情况下,st_read
似乎无法识别几何列(错误:'没有简单的特征几何列存在')。我也尝试过使用fread
,st_read
但这不起作用,因为fread
不适应空间数据。
解决方案
运行lapply
一个调用st_read
然后执行您需要的函数的函数,例如:
read_my_json = function(f){
s = st_read(f)
return(s[,c("MOVEMENT_ID","DISPLAY_NAME")]
}
(我很确定您也不必选择几何图形,在选择sf
空间对象的列时可以免费获得)
然后do.call(rbind, lapply(file.names, read_my_json))
应该工作。
不需要包含额外的软件包,它的最大优势在于您可以测试此功能以查看它在单个项目上的工作方式,然后再投入一千个项目。
推荐阅读
- mysql - SQL - 查找日期范围内的可用插槽
- c - 从 C 扩展函数内部确定 Lua 期望的返回值的数量
- python - 对于具有相同 ID 的类型,Python isinstance 返回 false
- vba - 工作表选择上的 Excel vba 宏崩溃 - 1 周前工作
- database - 如何从 InfluxDB 获取“MEASUREMENTS”的大小?
- sql - 带有 FROM 子句的更新语句
- java - Scala、Kotlin 和 Java 混合项目在迁移到 gradle 4.0 后在 compileScala 上失败
- javascript - D3使用过渡动画时数据系列渲染不完整
- sql - SQL:如果基表发生更改,临时表是否会在稍后调用时返回不同的结果?
- prestashop - 每第二个产品增加 50% 的折扣 (Prestashop)