将不同文件夹中的CSV文件读取到数据框中,附加现有CSV/dataframes中的数据
我正在尝试将csv文件读入R中的数据帧。我已经成功地在已定义的文件夹中循环,读取csv文件并分配它们,以便创建具有名称的数据帧。但是,如果数据帧已经存在,我似乎无法追加数据。如果数据帧已经存在,我想在底部追加新数据,而不仅仅是替换整个数据帧 这就是我迄今为止所做的工作:将不同文件夹中的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
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:这可能也会有帮助。请注意,您正在循环中增加objectmergedDF
。这是一个内存效率非常低的问题,在R中不推荐使用。请参阅以下文章:&