Ошибка в read.table (file = file, header = header, sep = sep, quote = quote,: строки не доступны на входе - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть несколько CSV-файлов (скажем, A.csv, B.csv, ...) в нескольких папках, скажем (F1, F2, ...). Я хочу прочитать все файлы таким образом, чтобы связать A.csv, B.csv каждой папки и создать основной фрейм данных для каждой папки. Это означает, что мне нужно иметь n данных для моих n папок с уникальным именем на основе имени папки.

Я попробовал этот код, чтобы получить список файлов CSV.

files <- dir("/Users/.../.../...", recursive=TRUE, full.names=TRUE, pattern="\\.csv$") 

затем создал функцию:

readFun <- function(x) { df <- read.csv(x)}

затем sapply:

sapply(files, readFun)

возвращает эту ошибку:

Error in read.table(file = file, header = header, sep = sep, quote = quote,  : no lines available in input

Я много играл с кодом, но не понял, как его отладить. Любая помощь высоко ценится.

Также, есть ли подсказка о том, как создать основной фрейм данных для каждой папки?

Спасибо

1 Ответ

0 голосов
/ 04 апреля 2020

Вы можете сначала получить все имена каталогов, а затем создать функцию для чтения всех файлов из одного каталога, объединяя их и записывая объединенный файл в один и тот же каталог.

all_directories <- dir('top/directory', full.names = TRUE)

bind_files_into_one <- function(file_path) {
   all_files <- list.files(file_path, full.names = TRUE, pattern = "\\.csv$")
   temp <- do.call(cbind, lapply(all_files, read.csv))
   write.csv(temp, paste0(file_path, '/combined.csv'), row.names = FALSE)
}

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

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