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 :

Matcher deux jeux de données


Sujet :

R

  1. #1
    Membre à l'essai
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 34
    Points : 11
    Points
    11
    Par défaut Matcher deux jeux de données
    Bonjour,
    j'aurais aimé que quelqu'un puisse me venir en aide concernant la fonction match
    Malgré l'aide R je n'arrive pas à coder et à appliquer à mon problème.
    J'ai deux jeux de données où le premier jeu dataA a par exemple pour variables :

    description
    coord
    sequence
    Sample_100 (variable numérique)
    Sample_102 (variable numérique)
    Sample_110 (variable numérique)

    et une seconde base dataB ayant une variable id (variable numérique) ayant pour modalités :

    300100
    300102
    300110

    Comment puis-je faire pour lier mes deux bases de données, à partir des trois derniers chiffres du id en fonction du Sample de référence ?
    J'ai donc songé à "matcher" mais je n'ai encore jamais utilisé cette procédure.
    Merci par avance de votre aide !

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Dans chaque data frame, il vous faut créer une colonne avec l'information commune aux deux jeux de données.
    Ensuite, vous faites un merge sur ces deux colonnes.
    Exemple :
    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
    > df1 <- data.frame(c1 = c("Sample_100", "Sample_101", "Sample_102"))
    > df1
              c1
    1 Sample_100
    2 Sample_101
    3 Sample_102
    > df2 <- data.frame(c2 = c("300100", "300101", "300102"))
    > df2
          c2
    1 300100
    2 300101
    3 300102
    > df1$code1 <- substr(df1$c1, nchar(df1$c1) - 2, nchar(df1$c1))
    > df1
              c1 code1
    1 Sample_100   100
    2 Sample_101   101
    3 Sample_102   102
    > df2$code2 <- substr(df2$c2, nchar(df2$c2) - 2, nchar(df2$c2))
    > df2
          c2 code2
    1 300100   100
    2 300101   101
    3 300102   102
    > merge(df1, df2, by.x = "code1", by.y = "code2")
      code1         c1     c2
    1   100 Sample_100 300100
    2   101 Sample_101 300101
    3   102 Sample_102 300102
    >
    J'ai extrait "code1" et "code2" l'information commune dans chacune des colonnes de mes 2 data frame. Puis je merge sur code1 et code2.
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre à l'essai
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Merci infiniment Monsieur. Je vais exécuter cela à ma base de données.
    (Je suis actuellement en formation R en stage, je n'ai jamais encore étudié certaines fonctions vues en stage, au cours de ma licence).

    Et il aurait été donc impossible de répondre à ma requête via la fonction match ?
    Seule merge peut fonctionner ici ?


    Edit :
    J'ai un soucis concernant le code, car R me renvoie l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    > df1$code1 <- substr(df1$c1, nchar(df1$c1) - 2, nchar(df1$c1))
    Erreur dans nchar(df1$c1) :  'nchar()' exige un vecteur de caractères comme argument
    il n'a pas considéré les valeurs de c2 de type caractère.

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Ça vient certainement du fait que R a transformé le vecteur de caractères en un facteur...

    Si vous faites str(data1$c1), qu'est-ce que vous obtenez ?
    Essayez alors ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df1$code1 <- substr(as.character(df1$c1), nchar(df1$c1) - 2, nchar(df1$c1))
    Pareil pour df2$code2...
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Membre à l'essai
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    D'accord, merci bien, je vais essayer.

    Sinon si j'exécute str(df1$c1)J'obtiens :
    Factor w/ 11 levels "Sample_103","Sample_107",..: 1 2 3 4 8 9 10 11 5 6 ...
    Edit : même avec l'ajout d'un as.character, le problème subsiste :/

  6. #6
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Les facteurs, pour les calculs statistiques, c'est bien, mais pour manipuler les données, c'est un poil pénible...
    Bon, alors on remonte d'un cran dans la conversion de la colonne en question.
    Essayez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    df1$c1 <- as.character(df1$c1)
    df1$code1 <- substr(df1$c1, nchar(df1$c1) - 2, nchar(df1$c1))
    Pareil pour le deuxième data frame si la colonne en question est aussi un facteur.
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  7. #7
    Membre à l'essai
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Merci infiniment Monsieur !

    J'ai exécuté et cela fonctionne parfaitement. Je vais réfléchir à tête reposée au code et je reviens vers vous si j'ai des questions

  8. #8
    Membre à l'essai
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Bonjour, je reviens vers vous car j'ai encore besoin d'une aide :/

    Je simplifie mes bases, afin de pouvoir appliquer à un cas simple.

    Je suppose que j'ai pour tables :

    TableA

    type - desc - ech100 - ech101
    1 ----- ID ----- 11 ------- 23
    3 ----- IP ----- 8 -------- 14
    2 ----- FI ----- 10-------- 17


    Et, une seconde TableB

    Id --- Resultat --- Com
    100 --- Oui ------ Diff
    101 --- Non ----- Addi


    En clair, il fallait donc relier ces deux tables pour que les informations relatives à ech100 soit lié à Id=100 et ech101 à Id=1
    Je devrai par la suite exploiter ggplot2, or il est impossible de réaliser des graphes même après avoir merger/matcher les deux tables, mon tuteur de stage m'a recommandé de créer une troisième table regroupant toutes les données des deux tables de la sorte :

    TableC

    ech100 [ "valeur de ech100", "valeurs de type", "valeurs de desc", "Id valant 100"*3, "Résultat valant Oui"*3, "Com valant Diff"*3]
    ech101 [ "valeur de ech101", "valeurs de type", "valeurs de desc", "Id valant 101"*3, "Résultat valant Non"*3, "Com valant Addi"*3]

    J'ai tenté en vain, de commencer par faire ech100 en employant (tableA$ech100,...)

    Mais je ne parviens pas à lier les valeurs de ech100 avec Id valant 100 dans tous les cas.

    Merci de votre aide :/

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/04/2015, 10h44
  2. Barplot avec deux jeux de données
    Par Francois1435 dans le forum R
    Réponses: 3
    Dernier message: 23/04/2014, 11h57
  3. calcul décalage en temps de deux jeux de données
    Par Newenda dans le forum Signal
    Réponses: 2
    Dernier message: 13/02/2014, 15h48
  4. [MySQL] Connexion à deux bases de données
    Par genova dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/09/2005, 00h50
  5. [MySQL] Se connecter à deux base de données en même temps ??
    Par leo13 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 20/01/2005, 10h36

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