J'essaye de merge
plusieurs data.frames
en un data.frame
. Comme j'ai toute une liste de fichiers, j'essaye de le faire avec une structure en boucle.Fusionner plusieurs data.frames en un data.frame avec une boucle
Jusqu'à présent, l'approche en boucle fonctionne bien. Cependant, cela semble assez inefficace et je me demande s'il existe une approche plus rapide et plus facile. Voici le scénario: J'ai un répertoire avec plusieurs fichiers .csv
. Chaque fichier contient le même identifiant qui peut être utilisé comme variable de fusion. Étant donné que les fichiers sont assez volumineux, j'ai pensé lire chaque fichier un à la fois dans R au lieu de lire tous les fichiers à la fois. Donc, je reçois tous les fichiers du répertoire avec list.files
et lire dans les deux premiers fichiers. Ensuite, j'utilise merge
pour obtenir un 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)
Maintenant, j'utiliser une boucle for
pour obtenir tous les .csv
fichiers restants et merge
-les dans le déjà existant 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)
}
Même si cela fonctionne très bien, je me demandais s'il y a un plus moyen élégant pour faire le travail?
Il peut être intéressant de remarquer que vous pouvez obtenir toute e fusionné, avec une colonne '.id' supplémentaire contenant les noms de fichiers en appelant' ldply' au lieu de 'llply'. L'appel 'Reduce' ou' merge' n'est alors pas nécessaire. – CharlesB