Je dispose d'une liste de nombreux data.frames que je souhaite fusionner. Le problème est que chaque data.frame diffère en termes de nombre de lignes et de colonnes, mais qu'ils partagent tous les mêmes variables clés (que j'ai appelées "var1"
y "var2"
dans le code ci-dessous). Si les data.frames étaient identiques en termes de colonnes, je pourrais simplement rbind
pour lequel le plyr's rbind.fill ferait l'affaire, mais ce n'est pas le cas avec ces données.
Parce que le merge
ne fonctionne que sur 2 data.frames, je me suis tourné vers l'Internet pour trouver des idées. J'ai obtenu celle-ci de aquí qui fonctionnait parfaitement dans R 2.7.2, qui est la version que j'avais à l'époque :
merge.rec <- function(.list, ...){
if(length(.list)==1) return(.list[[1]])
Recall(c(list(merge(.list[[1]], .list[[2]], ...)), .list[-(1:2)]), ...)
}
Et j'appellerais la fonction comme ça :
df <- merge.rec(my.list, by.x = c("var1", "var2"),
by.y = c("var1", "var2"), all = T, suffixes=c("", ""))
Mais dans toute version de R postérieure à 2.7.2, y compris 2.11 et 2.12, ce code échoue avec l'erreur suivante :
Error in match.names(clabs, names(xi)) :
names do not match previous names
(Incidemment, je vois d'autres références à cette erreur ailleurs sans résolution).
Y a-t-il un moyen de résoudre ce problème ?