R : fusion avec bind_rows, connaître les règles
Bonjour,
Je dois réaliser une fusion verticale de plusieurs bases, de l'année n, (n+1) et (n+2)
En gros, je rajoute des lignes supplémentaires à la 1ère base (n)
Quand il s'agit d'une même variable, le nom reste inchangé d'une année sur l'autre.
Mais il peut y avoir de nouvelles variables. Ainsi en (n+2), il y a des variables qui n'existaient pas en (n) et en (n+1).
Quelles sont les règles à adopter pour réaliser cette fusion avec bind_rows de dplyr.
J'ai déjà regardé la documentation de dplyr. Les exemples y sont trop faciles : les bases à fusionner ont les mêmes variables, les colonnes sont ordonnées de manière identique.
Que se passe-t-il quand les bases disposent de variables différentes et les colonnes ne sont pas ordonnées de la même façon d'une année à l'autre ?
Merci de votre aide.
R : fusion avec bind_rows, connaître les règles
Bonjour,
Ne cherchez pas de grandes règles, testez et regardez ce qui se passe.
Le fonctionnement que vous décrivez correspond à la fonction rbind(), encore que les variables n'ont pas besoin d'être dans le même ordre :
Code:
1 2 3 4 5 6 7
| > df0 <- data.frame(V1=1,V2=2)
> df1 <- data.frame(V2=2,V1=1)
> df0 <- rbind(df0,df1)
> df0
V1 V2
1 1 2
2 1 2 |
La fonction rbind() nécessite en effet que toutes les variables soient présentes dans les deux bases :
Code:
1 2 3 4 5 6 7 8
| > df2 <- data.frame(V2=2,V3=3)
> df0 <- rbind(df0,df2)
Error in match.names(clabs, names(xi)) :
les noms ne correspondent pas aux noms précédents
> df2 <- data.frame(V1=1,V2=2,V3=3)
> df0 <- rbind(df0,df2)
Error in rbind(deparse.level, ...) :
les nombres de colonnes des arguments ne correspondent pas |
La fonction bind_rows() dépasse cette limitation (df2 contient la variable V3 qui n'existe pas dans df0 et la fusion s'exécute correctement) :
Code:
1 2 3 4 5 6 7 8 9 10
| > df2 <- data.frame(V2=2,V3=3)
> df2
V2 V3
1 2 3
> df0 <- bind_rows(df0,df2)
> df0
V1 V2 V3
1 1 2 NA
2 1 2 NA
3 NA 2 3 |
Cordialement,