IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

R : fusion avec bind_rows, connaître les règles


Sujet :

R

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 16
    Points
    16
    Par défaut 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.

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut
    Bonjour,

    Un petit test vous montrera le fonctionnement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    > df0 <- data.frame(V1=1,V2=2)
    > df0
      V1 V2
    1  1  2
    1) Ajout d'un dataframe dont les variables sont inversées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    > df1 <- data.frame(V2=2,V1=1)
    > df1
      V2 V1
    1  2  1
    > library(dplyr)
    > df0 <- bind_rows(df0,df1)
    > df0
      V1 V2
    1  1  2
    2  1  2
    2) Ajout d'un dataframe avec une variable en moins et une autre en plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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,

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Merci pour votre message mais je dois dire que je n'ai pas compris votre réponse.
    Quelles sont les règles que je pourrais déduire de ces exemples ?

    Il me semble qu'avec SAS, il est facile de rajouter des lignes d'une base (n) à une base initiale (n-1). SAS reconnait les colonnes pourvu qu'elles portent le même nom.
    Alors que sous R (tout comme Excel), il faut que les colonnes soient ordonnées de la même façon dans toutes les bases avant de les fusionner. Il ne doit pas manquer non plus de colonnes : cela signifie la création de colonne (vide si je n'ai pas d'information), juste pour disposer d'un nombre identique de colonnes.

    Merci pour votre aide.

    Bonne journée.

  4. #4
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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,

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    Bonsoir mgdondon,

    Merci beaucoup. Du coup, cela devient plus attrayant d'utiliser R grâce à bind_rows() qui nécessite ni un même ordre des variables ni le même nombre de colonnes.
    Encore merci !

    Bonne soirée ;-))

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Checkstyle] [Eclipse] Mettre en conformité le formater avec les règles ?
    Par mystro7200 dans le forum Qualimétrie
    Réponses: 4
    Dernier message: 27/01/2009, 16h34
  2. [PDO] Connaître les champs d'une table avec PDO
    Par Yadutaf dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/02/2008, 13h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo