Выберите столбцы при чтении в файлах с st_read - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь прочитать 39 json файлов в общий набор данных sf в R.

Вот метод, который я пробовал:

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 не адаптирован к пространственным данным.

1 Ответ

0 голосов
/ 17 января 2020

Запустите 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)) должно работать.

дополнительные пакеты не нужно включать, и он имеет большое преимущество в том, что вы можете протестировать эту функцию, чтобы увидеть, как она работает с одним элементом, прежде чем бросить на него тысячу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...