我试图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)
}
- 3 回答
- 0 关注
- 2090 浏览
添加回答
举报
0/150
提交
取消