【问题标题】:How do I read thru multiple files in different folders and store them seperately base on the folder from which they've been retrieved?如何通过不同文件夹中的多个文件读取并根据从中检索它们的文件夹单独存储它们?
【发布时间】:2020-04-26 12:17:14
【问题描述】:

主要想法是我现在在本地机器上有两个文件夹/路径。在每个文件夹中,我有多个 csv 文件,我想将这些文件读入我的R。但是,我不想将它们全部附加到一个文件中,而是希望所有文件夹 1 文件都在文件 1 中,所有文件夹 2 文件都在文件 2 中。我只知道如何将它们全部附加在一起,但不知道如何将它们附加到两个单独的文件中。以下是我目前的代码。

dirs<-list("path/folder1","path/folder2")
data<-list()
for(dir in dirs){
  ##read in the list of files in each folder
  flist<-list.files(path=dir,pattern = "\\.csv$")
  ## a second for loop to read thru what's inside each folder
  for (file in flist){message("working on",file) 
    indata<-fread(paste0(dir,file))
    data<-rbind(data,indata)}
}

到目前为止,我认为data 将所有内容保存在一个文件中。那么我该怎么做才能将它们保存到两个不同的文件中?

【问题讨论】:

  • 你可以这样做:sapply(dirs,function(p)write.csv(do.call(rbind,lapply(list.files(p,full.names = TRUE,pattern = 'csv$'), read.csv)),paste0(p,"/newfile.csv")))

标签: r


【解决方案1】:

您可以将您读入的文件分配到以您的文件夹编号命名的新 R 对象中。我将list() 更改为c()dirs,以便更轻松地分配assign()。并将data &lt;- list() 移动到第一个循环中,以便在每个文件夹完成后将其覆盖。

dirs<-c("path/folder1","path/folder2")

for(dir in 1:length(dirs)){
  ##read in the list of files in each folder
  flist<-list.files(path=dirs[dir], pattern = "\\.csv$")

  data <- list()
  ## a second for loop to read thru what's inside each folder
  for (file in flist){message("working on", file) 
    indata<-read.csv(paste0(dirs[dir],"/",file))
    data<-rbind(data,indata)
    assign(paste0("data_",dir), data)
    }
}

【讨论】:

    【解决方案2】:

    我能想到的最快的选择是尝试使用data[[dir]] 使每个目录的数据在data 列表中成为自己的对象。然后您可以使用data$`path1` 等访问它们。

    dirs<-list("path/folder1","path/folder2")
    data<-list()
    for(dir in dirs){
      ##read in the list of files in each folder
      flist<-list.files(path=dir,pattern = "\\.csv$")
      ## a second for loop to read thru what's inside each folder
      for (file in flist){message("working on",file) 
        indata<-fread(paste0(dir,file))
        data[[dir]]<-rbind(data[[dir]],indata)}
    }
    

    (但是,使用lapply instead of for loops 可能会更好(更快))

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 2010-11-26
      • 2013-07-17
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多