我有很多csv文件集合在不同的文件夹和文件夹中的文件夹中,我需要合并到一个文件中.如果它们都在一个目录中会很容易,但我不知道一个简单的方法将它们从不同的文件夹中拉出来.我可以一个接一个地组合它们,但是有很多它们.
例如:
+ working directory
|
+-- · data.csv
+-- · data2.csv
+-- + NewFolder
|
+-- · data3.csv
+-- + NewFolder2
|
+-- · data4.csv
Run Code Online (Sandbox Code Playgroud)
我想要一个组合所有数据csv文件的文件
您可以使用dir()与recursive设置为TRUE列出文件夹树中的所有文件,并且可以使用pattern来定义一个正则表达式来过滤.csv文件.一个例子:
csv_files <- dir(pattern='.*[.]csv', recursive = T)
Run Code Online (Sandbox Code Playgroud)
甚至更好更简单(感谢speendo的评论):
csv_files <- dir(pattern='*.csv$', recursive = T)
Run Code Online (Sandbox Code Playgroud)
说明.
pattern='*.csv$:pattern参数必须是过滤文件名的正则表达式.此RegEx过滤掉以此结尾的文件名.csv.
如果你想过滤开始data,你应该尝试这样的模式:pattern='^data.*.csv$'
recursive=T:强制dir()以递归方式遍历工作目录下的所有文件夹.你得到后的文件列表,并假设他们都具有相同的结构(即所有文件具有相同的列),你可以将它们合并read.csv()和rbind():
for(i in 1:length(csv_files)) {
if(i == 1)
df <- read.csv(csv_files[i])
else
df <- rdbind(df, read.csv(csv_files[i]))
}
Run Code Online (Sandbox Code Playgroud)
Ramnath在他的评论中建议更快地合并.csv文件(同样,假设它们都具有相同的结构):
library(dplyr)
df <- rbind_all(lapply(csv_files, read_csv))
Run Code Online (Sandbox Code Playgroud)