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 :

Correspondance de colonnes entre des bases de données différentes


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 3
    Par défaut Correspondance de colonnes entre des bases de données différentes
    Bonjour à tous !

    Je suis actuellement en train de fusionner une dizaine de base de données différentes dans le cadre d'un inventaire scientifique (faune et flore).

    J'ai fusionné les bases grâce à la fonction smartbind, du package gtools.
    Toutefois, les tableaux étant très différents les uns des autres, certaines colonnes sont appelées différemment dans deux bases de données mais contiennent les mêmes informations.

    Par exemple :

    Base_1
    cd_ref coord_x coord_y nom_cite
    4319 4,1379241 43,537473 Muscicapa striata


    Base_2
    Latitude Y Longitude X milieu nom scientifique
    43,48525901 4,15973655 joncaie/roselière avec tamaris Solenopsis fugax

    Dans cet exemple, je cherche à fusionner ces deux bases afin d'ajouter les observations les unes en dessous des autres, mais je voudrais aussi faire correspondre les colonnes coord_x/Longitude X, coord_y/Latitude Y et nom_cite/nom scientifique afin de ne pas créer des colonnes supplémentaires, qui contiendraient la même information (et ainsi simplifier la base de donnée finale).

    J'ai essayé d'utiliser full_join(Base_1,Base_2,by=c("nom_cite"="nom scientifique")) mais je me retrouve avec cette erreur :
    Error: `by` can't contain join column `nom scientifique` which is missing from RHS
    Call `rlang::last_error()` to see a backtrace
    De plus, je ne suis pas sûre qu'une jointure soit très adaptée étant donnée que je souhaite ajouter des observations d'une base vers l'autre, observations qui sont donc indépendantes les unes des autres.

    Auriez-vous des suggestions ?

    Je vous remercie beaucoup par avance, merci d'avoir pris le temps de me lire !

    Bérénice

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 491
    Par défaut
    bonjour, une jointure n'est pas possible dans ce cas là
    il faut dans un premier temps sélectionner seulement les colonnes qui t’intéressent dans les deux dataframes les (colonnes communes )
    dans un deuxième temps il faut harmoniser les noms de colonnes des 2 dataframes
    puis ajouter les données du deuxième dataframe au premier

    un exemple de code avec le tidyverse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    library(tidyverse)
    ## selection des colonnes
     Base_1 <- Base_1 %>% select( coord_x,coord_y, nom_cite)
     Base_2 <- Base_2 %>% select("Longitude X", "Longitude X","nom scientifique")
     
    ## harmonisation des noms de colonnes
     names(Base_2)<-names(Base_1)
     
    ##ajout des enregistrements
    Base_resultat <- Base_1 %>% bind_rows(Base_2)
    cdlt

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 3
    Par défaut
    Bonjour,

    Je te remercie beaucoup pour ta réponse.

    J'ai deux petits problèmes en faisant tourner ton code.
    Tout d'abord, lors de l'ajout des enregistrements, j'ai une erreur qui est sûrement due au format de mes colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    > Base_resultat <- sinp %>% bind_rows(bdd_foumis)
    #Error: Column `id_uniq` can't be converted from integer to factor
    Pour résoudre ce problème j'ai utilisé cette fonction et qui a l'air de fonctionner de la même façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Base_resultat <- bind_rows(mutate_all(Base_1, as.character), mutate_all(Base_2, as.character))
    Le second problème que j'ai est que mes bases de données n'ont pas la même armature.
    Ma base de donnée "référence" (Base_1) a 84 colonnes et la seconde 9. Je cherche à garder toutes les colonnes de ma première base de donnée, et de faire correspondre les colonnes de la deuxième base à celles de la première. Les variables qui figurent dans la deuxième base n'auront pas de correspondance pour toutes les colonnes de la première base et dans ce cas je cherche à faire figurer un "NA" lorsqu'il n'y a pas d'information à renseigner pour une colonne.

    Y a-t-il un moyen de garder toutes les colonnes de la Base_1 tout en harmonisant les noms des deux bases de données ?

    Merci d'avance !

    Bérénice

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 491
    Par défaut
    tu peux utiliser la fonction add_row

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    resultat<-Base_1 %>% add_row(coord_x=Base_2$coord_x,coord_y=Base_2$coord_y,...) # tu mets toutes les variables que tu veux rajouter
    tu n'as même pas besoin de changer les noms des colonnes de Base_2 (ex: coord_x=Base_2$`Longitude X`)

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 3
    Par défaut
    Super ça fonctionne !

    Merci infiniment pour ton aide et désolée pour mes questions quelque peu naïves

    Bonne continuation,

    Bérénice

Discussions similaires

  1. lien SQL externe entre 2 bases de données différentes
    Par francis60 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/07/2017, 13h49
  2. Réponses: 1
    Dernier message: 18/11/2010, 13h19
  3. Colonne commentaire des bases de données.
    Par dkwasiborski dans le forum Hibernate
    Réponses: 0
    Dernier message: 20/10/2008, 16h27
  4. Menu principal pour des bases de données différentes ?
    Par Kareg dans le forum Modélisation
    Réponses: 30
    Dernier message: 20/08/2007, 17h10
  5. Réponses: 8
    Dernier message: 29/06/2007, 11h24

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