Merge several data.frames into one data.frame with a loop
Solution 1:
You may want to look at the closely related question on stackoverflow.
I would approach this in two steps: import all the data (with plyr
), then merge it together:
filenames <- list.files(path=".../tempDataFolder/", full.names=TRUE)
library(plyr)
import.list <- llply(filenames, read.csv)
That will give you a list of all the files that you now need to merge together. There are many ways to do this, but here's one approach (with Reduce
):
data <- Reduce(function(x, y) merge(x, y, all=T,
by=c("COUNTRYNAME", "COUNTRYCODE", "Year")), import.list, accumulate=F)
Alternatively, you can do this with the reshape
package if you aren't comfortable with Reduce
:
library(reshape)
data <- merge_recurse(import.list)
Solution 2:
If I'm not mistaken, a pretty simple change could eliminate the 3:length(FileNames)
kludge:
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)
}