如何从R中的嵌套文件夹合并csv文件

Tsh*_*cha 2 csv file-io r

我有很多csv文件集合在不同的文件夹和文件夹中的文件夹中,我需要合并到一个文件中.如果它们都在一个目录中会很容易,但我不知道一个简单的方法将它们从不同的文件夹中拉出来.我可以一个接一个地组合它们,但是有很多它们.

例如:

+ working directory
|
+-- · data.csv
+-- · data2.csv
+-- + NewFolder
    |
    +-- · data3.csv
    +-- + NewFolder2
        |
        +-- · data4.csv
Run Code Online (Sandbox Code Playgroud)

我想要一个组合所有数据csv文件的文件

Bar*_*nka 7

您可以使用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)

  • 我会使用`dplyr`中的`rbind_list`,速度要快得多.所以你会写`rbind_list(lapply(csv_files,read.csv))` (2认同)