Ich versuche merge
mehrere in einem data.frame
. Da ich eine ganze Liste von Dateien habe, versuche ich es mit einer Schleifenstruktur zu machen.Merge mehrere data.frames in einem data.frame mit einer Schleife
Bisher funktioniert der Loop-Ansatz gut. Es sieht jedoch ziemlich ineffizient aus und ich frage mich, ob es einen schnelleren und einfacheren Ansatz gibt.
Hier ist das Szenario: Ich habe ein Verzeichnis mit mehreren .csv
Dateien. Jede Datei enthält denselben Bezeichner, der als Fusionsvariable verwendet werden kann. Da die Dateien ziemlich groß sind, dachte ich, jede Datei einzeln in R zu lesen, anstatt alle Dateien gleichzeitig zu lesen. So bekomme ich alle Dateien des Verzeichnisses mit list.files
und lese die ersten beiden Dateien ein. Danach benutze ich merge
um eine data.frame
zu bekommen.
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)
Jetzt benutze ich eine for
Schleife alle verbleibenden .csv
Dateien zu erhalten und merge
sie in die bereits bestehende 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)
}
Auch wenn es ganz gut funktioniert Ich habe mich gefragt, ob es ein mehr elegante Weise, um den Job zu erledigen?
Es kann sich lohnen, zu bemerken, dass man das ganze th bekommen fusioniert, mit einer zusätzlichen '.id'-Spalte, die Dateinamen enthält, indem' ldply' anstelle von 'llply' aufgerufen wird. Der Aufruf 'Reduzieren' oder 'Zusammenführen' ist dann nicht erforderlich. – CharlesB