首页 > 解决方案 > 使用 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_IDDISPLAY_NAMEgeometry。运行 st_read 时如何只选择这三列?

我试过运行geodata<-do.call(rbind, lapply(file.names, st_read,select=c('MOVEMENT_ID', 'DISPLAY_NAME', 'geometry'))),但在这种情况下,st_read似乎无法识别几何列(错误:'没有简单的特征几何列存在')。我也尝试过使用freadst_read但这不起作用,因为fread不适应空间数据。

标签: rselectsf

解决方案


运行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))应该工作。

不需要包含额外的软件包,它的最大优势在于您可以测试此功能以查看它在单个项目上的工作方式,然后再投入一千个项目。


推荐阅读