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 :

Fusion de 2 tables


Sujet :

R

  1. #1
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Par défaut Fusion de 2 tables
    Bonjour,
    J'aimerais faire une fusion entre deux tables en ne gardant qu'une seule fois une colonne qui pourrait se trouver dans les 2 tables.
    J'utilise la commande merge de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table3 <- merge ( Table1, Table2 , by="<champ_join>"  )
    Je pense qu'avec une option mon problème peut être résolu mais je ne la trouve pas.
    Merci

  2. #2
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Bonjour,

    Tout dépend de ce qu'il y a dans tes deux tables.
    Par défaut (sans by="<champ_join>"), merge() regroupe les tables sur toutes les colonnes commune (critère = nom).
    • Si dans ces colonnes communes tu as les même données, peu importe l'ordre, tu obtiendra ce que tu souhaites et sans colonne dupliquée.
    • Si certaines valeurs changent dans un champs, tu peux
      • soit le forcer à conserver toutes les valeurs en dupliquant les lignes et en remplissant ce qui manque avec des NA (option all=TRUE)
      • soit - si l'information portée sur les deux colonnes de même nom n'a pas le même sens - conserver les deux colonnes en spécifiant les champs à joindre (by=c("champ1", "champ2",...))


    Un exemple étant plus parlant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    > d1 <- data.frame(a=letters[1:5], b=2:6)
    > d2 <- data.frame(a=letters[1:5], b=2:6, LETTERS[7:3])
    > d3 <- data.frame(a=letters[1:5], b=seq(from=0, to=20, length=5), LETTERS[7:3])
    > 
    > merge(d1, d2)       # merge sur tous les noms communs ; même données en "a" et "b"
      a b LETTERS.7.3.
    1 a 2            G
    2 b 3            F
    3 c 4            E
    4 d 5            D
    5 e 6            C
    >
    > merge(d1, d3, all=TRUE)       # merge sur tous les noms communs ;  données différentes en "b" => on force à tout conserver
       a  b LETTERS.7.3.
    1  a  0            G
    2  a  2         <NA>
    3  b  3         <NA>
    4  b  5            F
    5  c  4         <NA>
    6  c 10            E
    7  d  5         <NA>
    8  d 15            D
    9  e  6         <NA>
    10 e 20            C
    >
    > merge(d1, d3, by="a")       # données différentes en "b" => on conserve les 2 colonnes séparément en mergeant sur "a" uniquement
      a b.x b.y LETTERS.7.3.
    1 a   2   0            G
    2 b   3   5            F
    3 c   4  10            E
    4 d   5  15            D
    5 e   6  20            C
    Note qu'il est possible de joindre des tables qui ont des données communes mais pas sous les même noms
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    > merge(d1, d3, by.x=c("a", "b"), by.y=c("b", "a"), all=TRUE)
          a b LETTERS.7.3.
    1     a 2         <NA>
    2     b 3         <NA>
    3     c 4         <NA>
    4     d 5         <NA>
    5     e 6         <NA>
    6  <NA> a            G
    7  <NA> b            F
    8  <NA> c            E
    9  <NA> d            D
    10 <NA> e            C
    Warning messages:
    1: In `[<-.factor`(`*tmp*`, ri, value = c(0, 5, 10, 15, 20)) :
      niveau de facteur incorrect, NAs générés
    2: In `[<-.factor`(`*tmp*`, ri, value = c(0, 5, 10, 15, 20)) :
      niveau de facteur incorrect, NAs générés
    >
    Bon, ici R renâcle parce que les types de données ne sont en fait pas les même dans les deux colonnes, mais l'idée est là.

    Pour davantage de précision concernant ton cas précis, il faudrait des exemples concrets de données : le code adéquat va véritablement dépendre de ce qu'il y a réellement en commun dans tes deux tables et de ce que tu veux conserver en cas de données manquantes.

Discussions similaires

  1. Fusion de plusieurs tables
    Par Rikou31 dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 23/02/2007, 11h08
  2. Réponses: 2
    Dernier message: 31/01/2007, 23h52
  3. "fusion" de trois tables avec traitement SQL
    Par Requin15 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 09/11/2006, 21h34
  4. Fusion de 2 tables
    Par Ludovic30 dans le forum Access
    Réponses: 6
    Dernier message: 19/06/2006, 21h43
  5. [Access] Fusion de 2 tables
    Par fikou dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/02/2006, 12h36

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