使用循环将多个data.frame合并为一个data.frame

我正在尝试将多个data.frames合并为一个data.frames。因为我有一个完整的文件列表,所以我尝试使用循环结构

到目前为止,循环方法运行良好。然而,它看起来效率很低,我想知道是否有一种更快更简单的方法

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

文件名<-list.files(path=“…/tempDataFolder/”)
第一文件<-read.csv(file=paste(“…/tempDataFolder/”,文件名[1],sep=”“),
header=T,na.strings=“NULL”)
第二文件<-read.csv(file=paste(“…/tempDataFolder/”,文件名[2],sep=”“),
header=T,na.strings=“NULL”)
数据合并<-合并(第一个文件,第二个文件,按=c(“国家名称”、“国家代码”、“年份”),
全部=T)

现在,我使用for循环获取所有剩余的.csv文件,并将它们合并到现有的数据中。frame

用于(i in 3:长度(文件名)){
ReadInMerge<-read.csv(文件=粘贴(“…/tempDataFolder/”,文件名[i],sep=”“),
header=T,na.strings=“NULL”)
dataMerge<-merge(dataMerge,ReadInMerge,by=c(“COUNTRYNAME”、“COUNTRYCODE”、“Year”),
全部=T)
}

尽管效果很好,但我想知道是否有更优雅的方式来完成这项工作

您可能想看看与stackoverflow密切相关的问题

我将通过两个步骤实现这一点:导入所有数据(使用plyr),然后将其合并在一起:

文件名<-list.files(path=“…/tempDataFolder/”,full.names=TRUE)
图书馆(plyr)
import.list<-llply(文件名,read.csv)

这将为您提供一个现在需要合并在一起的所有文件的列表。有很多方法可以做到这一点,但这里有一种方法(使用Reduce):

数据<-减少(函数(x,y)合并(x,y,all=T,
by=c(“国家名称”、“国家代码”、“年份”)、import.list、accumulate=F)

或者,如果您对Reduce不满意,可以使用重塑软件包执行此操作:

库(重塑)
数据<-merge_recurse(import.list)

发表评论