Sto provando a merge
diversi in uno data.frame
. Dal momento che ho un intero elenco di file sto cercando di farlo con una struttura ad anello.Unisci più data.frames in un data.frame con un loop
Finora l'approccio del ciclo funziona correttamente. Tuttavia, sembra piuttosto inefficiente e mi chiedo se esiste un approccio più rapido e semplice.
Ecco lo scenario: Ho una directory con diversi file .csv
. Ogni file contiene lo stesso identificatore che può essere utilizzato come variabile di fusione. Poiché i file sono di dimensioni piuttosto grandi, ho pensato di leggere ogni file uno alla volta in R invece di leggere tutti i file contemporaneamente. Quindi ottengo tutti i file della directory con list.files
e letto nei primi due file. Successivamente uso merge
per ottenere 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)
Ora uso un ciclo for
per ottenere tutti i .csv
file rimanenti e merge
loro nel già esistente 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)
}
Anche se funziona bene mi chiedevo se esiste un altro modo elegante per fare il lavoro?
può valere la pena di notare che è possibile ottenere l'intera ° unito, con una colonna '.id' aggiuntiva contenente nomi di file chiamando' ldply' invece di 'llply'. La chiamata 'Reduce' o' merge' non è più necessaria. – CharlesB