猿问

通过循环将多个data.frame合并为一个data.frame

我试图merge几个data.frames成一个data.frame。由于我有完整的文件列表,因此我尝试使用循环结构来实现。


到目前为止,循环方法可以正常工作。但是,它看起来效率很低,我想知道是否有更快,更轻松的方法。


这是场景:我有一个包含多个.csv文件的目录。每个文件包含相同的标识符,可用作合并变量。由于文件很大,我想一次将每个文件读入R中,而不是一次读取所有文件。因此,我获得了目录的所有文件,list.files并读取了前两个文件。之后我用merge一个data.frame。


FileNames <- list.files(path=".../tempDataFolder/")

FirstFile <- read.csv(file=paste(".../tempDataFolder/", FileNames[1], sep=""),

             header=T, na.strings="NULL")

SecondFile <- read.csv(file=paste(".../tempDataFolder/", FileNames[2], sep=""),

              header=T, na.strings="NULL")

dataMerge <- merge(FirstFile, SecondFile, by=c("COUNTRYNAME", "COUNTRYCODE", "Year"),

             all=T)

现在,我使用for循环将所有剩余的.csv文件和merge它们放入已经存在的文件中data.frame:


for(i in 3:length(FileNames)){ 

ReadInMerge <- read.csv(file=paste(".../tempDataFolder/", FileNames[i], sep=""),

               header=T, na.strings="NULL")

dataMerge <- merge(dataMerge, ReadInMerge, by=c("COUNTRYNAME", "COUNTRYCODE", "Year"),

             all=T)

}

即使一切正常,我想知道是否还有更优雅的方法来完成工作?


杨魅力
浏览 2091回答 3
3回答

慕村225694

如果我没记错的话,一个非常简单的更改可以消除3:length(FileNames)麻烦:FileNames <- list.files(path=".../tempDataFolder/", full.names=TRUE)dataMerge <- data.frame()for(f in FileNames){&nbsp;&nbsp; ReadInMerge <- read.csv(file=f, header=T, na.strings="NULL")&nbsp; dataMerge <- merge(dataMerge, ReadInMerge,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;by=c("COUNTRYNAME", "COUNTRYCODE", "Year"), all=T)}
随时随地看视频慕课网APP
我要回答