Estoy tratando de merge
varios data.frames
en uno data.frame
. Como tengo una lista completa de archivos, intento hacerlo con una estructura de bucle.Combinar varios data.frames en un data.frame con un bucle
Hasta ahora, el enfoque de bucle funciona bien. Sin embargo, parece bastante ineficiente y me pregunto si hay un enfoque más rápido y más fácil.
Aquí está el escenario: Tengo un directorio con varios archivos .csv
. Cada archivo contiene el mismo identificador que puede usarse como la variable de fusión. Como los archivos son de un tamaño bastante grande, pensé leer cada archivo uno a la vez en R en lugar de leer todos los archivos a la vez. Obtengo todos los archivos del directorio con list.files
y leo los primeros dos archivos. Luego uso merge
para obtener uno 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)
Ahora uso un bucle for
para obtener todos los .csv
archivos restantes y merge
ellos en el ya existente 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)
}
A pesar de que funciona bien me preguntaba si hay una mayor manera elegante de hacer el trabajo?
vale la pena notar que se puede obtener toda la XX ing fusionada, con una columna '.id' adicional que contiene nombres de archivos al llamar a' ldply' en lugar de 'llply'. La llamada 'Reduce' o' merge' no es necesaria. – CharlesB