for跨不同文件夹和年份循环以读取csv数据

时间:2018-10-07 19:03:38

标签: r

我正在尝试编写一个简单的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产品的所有年份的数据,所以我试图创建一个单独的产品向量,即products <- c("beer", "bread", "milk"),我可以在以后加载。

产品文件夹的格式都相同,所以牛奶可能是C:/Users/user/Desktop/data/Year1/milk/milk.csv。此外,所有年份的文件名都相同,因此,例如,第一年的milk.csv在第七年也称为milk.csv

我可以粘贴我当前拥有的东西

2 个答案:

答案 0 :(得分:2)

利用您先前在Loading Multiple Files into R at the same time with similar file names中发布的数据,这是为特定产品划分list.files()dir()的结果的一种方法。

我们会将列表子集包含产品beermilk的产品。

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"
>

如果使用此技术,则根据我对Loading Multiple Files into R at the same time with similar file names的回答,可以使用lapply()来读取文件,而无需进行for()循环。

答案 1 :(得分:0)

有多种方法可以将一个文件夹中的多个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.