为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

杨魅力 2019-10-09 14:47:57
我试图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)}即使一切正常,我想知道是否还有更优雅的方法来完成工作?
查看完整描述

3 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

如果我没记错的话,一个非常简单的更改可以消除3:length(FileNames)麻烦:


FileNames <- list.files(path=".../tempDataFolder/", full.names=TRUE)

dataMerge <- data.frame()

for(f in FileNames){ 

  ReadInMerge <- read.csv(file=f, header=T, na.strings="NULL")

  dataMerge <- merge(dataMerge, ReadInMerge, 

               by=c("COUNTRYNAME", "COUNTRYCODE", "Year"), all=T)

}


查看完整回答
反对 回复 2019-10-09
  • 3 回答
  • 0 关注
  • 2017 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信