#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.csv4. Кажется маловероятным, что вы могли бы получить бесконечный цикл. Сколько именно файлов у вас есть? Достаточно ли у вас оперативной памяти для загрузки всех данных в память?
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]])
}
При этом имена списков используются в качестве вновь присвоенного имени переменной, поэтому убедитесь, что оно установлено соответствующим образом.