将不同文件夹中的CSV文件读取到数据框中,附加现有CSV/dataframes中的数据

将不同文件夹中的CSV文件读取到数据框中,附加现有CSV/dataframes中的数据,r,csv,dataframe,R,Csv,Dataframe,我正在尝试将csv文件读入R中的数据帧。我已经成功地在已定义的文件夹中循环,读取csv文件并分配它们,以便创建具有名称的数据帧。但是,如果数据帧已经存在,我似乎无法追加数据。如果数据帧已经存在,我想在底部追加新数据,而不仅仅是替换整个数据帧 这就是我迄今为止所做的工作: fileName <- list.files("\\path\\subfolder", "*csv", full.names = FALSE) fileName <- gsub(".csv", "", fileNam

我正在尝试将csv文件读入R中的数据帧。我已经成功地在已定义的文件夹中循环,读取csv文件并分配它们,以便创建具有名称的数据帧。但是,如果数据帧已经存在,我似乎无法追加数据。如果数据帧已经存在,我想在底部追加新数据,而不仅仅是替换整个数据帧

这就是我迄今为止所做的工作:

fileName <- list.files("\\path\\subfolder", "*csv", full.names = FALSE)
fileName <- gsub(".csv", "", fileName)

for (i in 1:length(testPath)) {
tempVar <-  read.csv(testPath[i])
assign(fileName[i], tempVar)
}

fileName我刚想出来。我对R非常陌生,所以我做了一个变通方法,创建一个临时数据帧(如果存在),然后将其与旧数据帧合并。如果将来有人在寻找代码,下面是我所做的

虽然不漂亮,但它很管用:

mainFilesOutputFolder <- paste("\\\\network\\folder\\", sep="")
scanSubFolders <- c("subfolder1", "subfolder2", "subfolder3")

for (k in 1:length(scanSubFolders)) {
  csvOutputs <- list.files(paste(mainFilesOutputFolder, scanSubFolders[k], "\\", sep=""), "*csv", full.names = TRUE)

  fileName <- list.files(paste(mainFilesOutputFolder, scanSubFolders[k], "\\", sep=""), "*csv", full.names = FALSE)
  fileName <- gsub(".csv", "", fileName)

  for (i in 1:length(csvOutputs)) {
    df_name <- fileName[i]
    if (exists(df_name)) {
      mergedDF <- rbind(get(fileName[i]),read.csv(csvOutputs[i]))
      assign(fileName[i], mergedDF)
      }else{
        #false
        assign(fileName[i], read.csv(csvOutputs[i]))
      } 
  }
}

mainFilesOutputFolder在这个非常熟悉的副本上有很多选项(尽管您应该避免使用
assign
)的任何解决方案):您好,这篇文章是我上面代码的基础。但是,当在不同的文件夹中循环时,它不会将任何数据附加到现有的数据帧中。还尝试了使用list2env(lappy())的更新方法,如果我多次运行代码,我无法获得数据来添加解决方案,这些解决方案没有以最清晰的方式组织,但其中许多使用
do.call(rbind,…)
dplyr::bind_rows
或data.table中的等效项来执行您想要的操作。所有的都在那里,你只需要仔细慢慢地阅读,因为正如我所说,它没有组织得尽可能干净。在那里,我编辑了第一个答案,这可能是你真正尝试的唯一答案。希望它现在能为您指明一个更有用的方向。@robs:这可能也会有帮助。请注意,您正在循环中增加object
mergedDF
。这是一个内存效率非常低的问题,在R中不推荐使用。请参阅以下文章:&