В R, как прочитать список имен файлов в отдельные фреймы данных?

#r #lapply

#r #lapply

Вопрос:

У меня есть (длинный) список имен файлов .csv, и я хочу прочитать каждый файл .csv в свой собственный фрейм данных в R.

… «./data/2019-Q2.csv» «./data/2019-Q3.csv» …

Я думал, что это должно сработать:

 allDFs <- lapply(csvPath, read.csv)
  

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

Комментарии:

1. Вы можете использовать list.files и получить все пути к файлу .csv, т.Е. files <- list.files(pattern = "/data/2019-.*\.csv$", all.names = TRUE); lapply(files, read.csv)

2. Да, у меня есть список имен файлов (из использования list.files) на предыдущем шаге. Но как мне перейти от list.files к чтению каждого файла в отдельный фрейм данных?

3. вы можете использовать lst1 <- lapply(files, read.csv) это перебирает каждый элемент и считывает набор данных с помощью read.csv

4. Кажется маловероятным, что вы могли бы получить бесконечный цикл. Сколько именно файлов у вас есть? Достаточно ли у вас оперативной памяти для загрузки всех данных в память?

5. Попробуйте allDFs <- lapply(head(csvPath), read.csv) , который просто прочитает первые 6 файлов. Затем посмотрите на allDFs . Это должен быть список из 6 частей, allDFs[[1]] это первый фрейм данных и т.д.

Ответ №1:

Вы можете прочитать данные, используя list.files и lapply , как предложено в комментариях к OP. Чтобы сделать каждый элемент списка отдельным фреймом данных, используйте assign() функцию в цикле for:

 d <- split(iris, f = iris$Species)

for (i in names(d)) {
  assign(i, d[[i]])
}
  

При этом имена списков используются в качестве вновь присвоенного имени переменной, поэтому убедитесь, что оно установлено соответствующим образом.