для цикла по разным папкам и годам для чтения в данных CSV - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь написать простое for loop, чтобы прочитать несколько .csv файлов.Я посмотрел на list.files(pattern="data.*csv"), который, я думаю, не решает мою проблему.

У меня есть ссылка на данные, которые выглядят следующим образом:

read.csv("C:/Users/user/Desktop/data/Year1/beer/beer.csv")

У меня много лет данных, я пытаюсь написать что-то, что изменится с Year1 на (for i in 1:15)...

Во-вторых, у меня много продуктов, и на данный момент меня интересует только импорт данных за все годы для beer product, поэтому я пытаюсь создать отдельный вектор продуктов, т.е. products <- c("beer", "bread", "milk"), который я могу загрузить на более позднем этапе.

Формат папок с продуктами одинаков, поэтому молоко можетбыть C:/Users/user/Desktop/data/Year1/milk/milk.csv.Кроме того, имена файлов одинаковы для всех лет, поэтому milk.csv в год 1 также называется, например, milk.csv в год 7.

Я могу вставить то, что у меня есть

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Существует так много способов объединить несколько файлов CSV в папке в один.Вот несколько мыслей ...

setwd("C:/your_path_here/CSV Files/")
fnames <- list.files()
csv <- lapply(fnames, read.csv)
result <- do.call(rbind, csv)

filedir <- setwd("C:/your_path_here")
file_names <- dir(filedir)
your_data_frame <- do.call(rbind,lapply(file_names,read.csv))

filedir <- setwd("C:/your_path_here")
file_names <- dir(filedir)
your_data_frame <- do.call(rbind, lapply(file_names, read.csv, skip = 1, header = FALSE))

Чтобы получить каждый файл из нескольких папок, в одну папку, попробуйте следующее ....

xcopy *.ext destination /s

where ext identifies the type of file you want to copy, and destination where you want it copied to. For instance, to copy all of your *.docx files to D:\alldocx, type xcopy *.docx d:\alldocx /s.
0 голосов
/ 08 октября 2018

Используя данные, которые вы ранее разместили в Загрузка нескольких файлов в R одновременно с одинаковыми именами файлов , вот один из способов поднабора результата list.files() или dir() для определенных продуктов.

Мы добавим в список те, которые содержат продукты beer или milk.

aFileList <- c("Year1/beer/beer.csv",
               "Year1/blades/blades.csv",
               "Year1/carbbev/carbbev.csv",
               "Year1/cigets/cigets.csv",
               "Year1/mayo/mayo.csv",
               "Year1/milk/milk.csv",
               "Year1/mustketc/mustketc.csv",
               "Year2/beer/beer.csv",
               "Year2/blades/blades.csv",
               "Year2/carbbev/carbbev.csv",
               "Year2/cigets/cigets.csv",
               "Year2/mayo/mayo.csv",
               "Year2/milk/milk.csv",
               "Year2/mustketc/mustketc.csv")

aFileList[grep("beer|milk",aFileList)]

Функция grep() возвращает вектор порядковых номеров для элементов входного вектора, которые содержат токены, запрошенные в регулярном выражении, которое является первым аргументом grep().Это используется для подмножества исходного вектора имен файлов.

... и вывод:

> aFileList[grep("beer|milk",aFileList)]
[1] "Year1/beer/beer.csv" "Year1/milk/milk.csv" "Year2/beer/beer.csv" "Year2/milk/milk.csv"
>

Если вы используете эту технику, то вы можете использовать lapply() для чтения файлов, согласно моему ответу на Загрузка нескольких файловв R одновременно с аналогичными именами файлов , устраняя необходимость в цикле for().

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