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

iq0todco  于 2023-02-06  发布在  其他
关注(0)|答案(4)|浏览(159)

我有大量的csv文件,这些文件位于不同的文件夹中,以及需要合并到一个文件夹中的文件夹中。如果它们都在一个目录中,那就很容易了,但我不知道有什么简单的方法可以将它们从不同的文件夹中取出。我可以将它们一个接一个地合并,但它们太多了。
例如:

+ working directory
|
+-- · data.csv
+-- · data2.csv
+-- + NewFolder
    |
    +-- · data3.csv
    +-- + NewFolder2
        |
        +-- · data4.csv

我想要一个文件,结合所有数据csv文件

8hhllhi2

8hhllhi21#

您可以使用dir()并将recursive设置为TRUE来列出文件夹树中的所有文件,也可以使用pattern来定义regular expression以筛选.csv文件。

csv_files <- dir(pattern='.*[.]csv', recursive = T)

或者更好更简单(感谢speendo的评论):

csv_files <- dir(pattern='*.csv$', recursive = T)

"解释“

  • 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]))
}

Ramnath在他的评论中建议了一种更快的合并.csv文件的方法(同样,* 假设所有这些文件都具有相同的结构 *):

library(dplyr)
df <- rbind_all(lapply(csv_files, read_csv))
kmb7vmvb

kmb7vmvb2#

以下是dplyr的解决方案

# get list of files ending in csv in directory root
dir(root, pattern='csv$', recursive = TRUE, full.names = TRUE) %>%
  # read files into data frames
  lapply(FUN = read.csv) %>%
  # bind all data frames into a single data frame
  rbind_all %>%
  # write into a single csv file
  write.csv("all.csv")
vxf3dgd4

vxf3dgd43#

此解决方案假设所有*.csv文件具有相同的结构。
(未测试)

fileList <- list.files(
  pattern="*.csv$",
  recursive=TRUE,
  full.name=TRUE,
  )

completeCSV <- data.frame()

for(file in fileList) {
  print(file) # for debug: print current file
  if (nrow(completeCSV) == 0) {
    completeCSV <- read.csv(file)
  } else {
    curDF <- read.csv(file) # could also be read.csv2()
    rbind(completeCSV, curDF)
  }
}

write.csv(completeCSV) # could also be write.csv2()
atmip9wb

atmip9wb4#

碱R溶液。

files <- list.files(path = ".",pattern = "*.csv",recursive = TRUE)

write.csv(do.call(rbind,lapply(files, read.csv)), "combined_data.csv")

相关问题