【问题标题】:How to append multiple files in R如何在R中附加多个文件
【发布时间】:2016-02-07 12:08:43
【问题描述】:

我正在尝试读取文件列表并将它们附加到包含所有记录的新文件中。我不打算更改原始文件中的任何内容。我已经尝试了几种方法。

方法 1: 此方法会创建一个新文件,但在每次迭代时都会再次添加前一个文件。因为我是递归绑定数据框的。

files <- list.files(pattern = "\\.csv$")

  #temparary data frame to load the contents on the current file
  temp_df <- data.frame(ModelName = character(), Object = character(),stringsAsFactors = F)

  #reading each file within the range and append them to create one file
  for (i in 1:length(files)){
    #read the file
    currentFile = read.csv(files[i])

    #Append the current file
    temp_df = rbind(temp_df, currentFile)    
  }

  #writing the appended file  
  write.csv(temp_df,"Models_appended.csv",row.names = F,quote = F)

方法2:我从Rbloggers得到这个方法。此方法不会写入新文件,但会继续修改原始文件。

multmerge = function(){
  filenames= list.files(pattern = "\\.csv$")
  datalist = lapply(filenames, function(x){read.csv(file=x,header=T)})
  Reduce(function(x,y) {merge(x,y)}, temp_df)

}

有人可以建议我如何实现我的目标吗?

【问题讨论】:

    标签: r file csv append


    【解决方案1】:

    现在rbind_list() 有一个简单的答案!

    例如:

    dataFiles = map(Sys.glob("*.csv"), read.csv) 
    

    或者您正在将文件读入列表

    dat = rbind_list(dataFiles)
    

    dat 将是您正在寻找的内容!

    【讨论】:

    • 你的意思是data.table::rbindlist()
    • 你的意思是dataFiles = purrr::map(Sys.glob("*.csv"), read.csv)
    【解决方案2】:

    为您的 ListOfFileNames 试试这个:

    ListOfFileNames<-list.files(pattern=".txt")
    outFile <- file("all.txt", "w")
    for (i in ListOfFileNames){
        x <- readLines(i)
        writeLines(x, outFile) # in the link the 1st and last line are skipped
    }
    close(outFile)
    

    来源:https://r.789695.n4.nabble.com/R-Read-multiple-text-files-and-combine-into-single-file-td817344.html

    【讨论】:

      【解决方案3】:

      或者你可以继续在 R 中使用 shell 命令:

      system2("cat", args = "*.csv", stdout = "appendedfiles.csv")
      

      这适用于基于 unix 的系统;我不确定你会为 windows 做什么。

      【讨论】:

        【解决方案4】:

        它可能看起来像这样:

        files <- list.files(pattern = "\\.csv$")
        
        DF <-  read.csv(files[1])
        
        #reading each file within the range and append them to create one file
        for (f in files[-1]){
          df <- read.csv(f)      # read the file
          DF <- rbind(DF, df)    # append the current file
        }
        #writing the appended file  
        write.csv(DF, "Models_appended.csv", row.names=FALSE, quote=FALSE)
        

        或简称:

        files <- list.files(pattern = "\\.csv$")
        
        DF <-  read.csv(files[1])
        for (f in files[-1]) DF <- rbind(DF, read.csv(f))   
        write.csv(DF, "Models_appended.csv", row.names=FALSE, quote=FALSE)
        

        【讨论】:

          【解决方案5】:

          您可以使用它来将所有内容加载到一个数据集中。

          dataset <- do.call("rbind", lapply(file.list, FUN = function(file) {
            read.table(file, header=TRUE, sep="\t")
          }))
          

          然后只需使用write.csv 保存即可。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-11-22
            • 1970-01-01
            • 1970-01-01
            • 2019-06-07
            • 2021-08-28
            • 2014-03-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多