1. #1
    Membre à l'essai
    Inscrit en
    septembre 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 16
    Points : 13
    Points
    13

    Par défaut jointure par une chaine de caractère avec deux critères

    Bonjour,

    Je tente désespérément de croiser deux table en effectuant une double jointure dont l'une en recherchant une chaine de caractère :
    deux dataframe :

    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
    A <- baseinsee
     B <- extractcomptesclient
     
    str(baseinsee)
     
     $ RAISON_SOCIALE             : chr  "MONSIEUR THIERRY JANOYER" "VETEMENTS JARDI" "SA VETEMENTS GENIN" "MENUISERIE DU PONTHIEU" ...
     $ COMPLEMENT_RAISON_SOCIALE  : chr  "TAHITI PERLES CREATION" NA "G10" NA ...
     $ ADRESSE                    : chr  "170 AV DU COL DE L ANGE" "13 PL MAX LEJEUNE" "10 AVENUE DE LA REPUBLIQUE" "RTE DE DOULLENS" ...
     $ DEPARTEMENT                : chr  "13" "80" "44" "80" ...
     $ COMMUNE_ETABLISSEMENT      : int  NA NA NA NA NA NA NA NA NA NA ...
     $ COMMUNE                    : chr  NA NA NA NA ...
     $ CODE_COMMUNE_INSEE         : chr  "13" "80" "44" "80" ...
     $ CODE_POSTAL                : chr  "13420" "80100" "44600" "80100" ...
     $ SIREN                      : chr  "000325175" "005420104" "005680236" "005720222" ...
     $ SIRET                      : chr  "00032517500040" "00542010400019" "00568023600014" "00572022200016" ...
     
    str(extractcomptesclients)
     
    $ SIREN_Compte                   : chr  "309304616" "309304616" "309304616" "309304616" ...
     $ SIRET_Compte                   : chr  "30930461602767" "30930461602288" "30930461605141" "30930461600118" ...
     $ RAISON_SOCIALE                 : chr  "REXEL FRANCE" "REXEL FRANCE" "REXEL FRANCE" "REXEL FRANCE" ...
     $ Rue_Compte                     : chr  "LE PAVE" "225 ROUTE D ANGOULEME" "AVE DES XVI JEUX OLYMPIQUES" "55 RUE DE LA FEDERATION" ...
     $ Code_Postal_Compte             : chr  "50300" "24000" "73600" "41350" ...
     $ CODE_COMMUNE_INSEE             : chr  "50288" "24322" "73181" "41212" ...
     $ Commune_Compte                 : chr  "MARCEY LES GREVES" "PERIGUEUX" "MOUTIERS" "ST GERVAIS LA FORET" ...
     $ Departement_Compte             : chr  "50" "24" "73" "41" ...
    Si je cherche l'exactitude, cela fonctionne via le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listecompte <- merge(x=extractcomptesclients,y=baseinsee, by=c("RAISON_SOCIALE","CODE_COMMUNE_INSEE"))
    Mais je voudrais étendre les recherche par le critère "RAISON SOCIALE" en recherchant une chaine de caractère de la table (extractcomptesclients) joint avec la table baseinsee

    Exemple :
    Baseinsee ///// extractcomptesclients
    RAISON_SOCIALE CODE_COMMUNE_INSEE ///// RAISON_SOCIALE CODE_COMMUNE_INSEE
    1 VETEMENTS JARDI 13068 ///// VETEMENT JARDI 13068
    2 IKEA 75002 ///// SOCIETE IKEA 75002

    Unitairement c’est faisable par le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rech<-filter(Rech,str_detect(RAISON_SOCIALE,".IKEA."))
    Mais comment faire sur plusieurs enregistrement ?

    Merci de votre aide

  2. #2
    Membre habitué
    Inscrit en
    février 2011
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : février 2011
    Messages : 69
    Points : 140
    Points
    140

    Par défaut

    Bonjour,

    une possibilité : str_detect(x, "\\b(JARDI|IKEA)\\b").
    cdlt

  3. #3
    Membre à l'essai
    Inscrit en
    septembre 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 16
    Points : 13
    Points
    13

    Par défaut ok mais

    Merci pour la réponse.

    Effectivement cela peut marcher lorsque l'on connaît la chaîne de caractère que l'on cherche, mais si je ne la connaît pas.... je souhaiterai connaître la commande pour rechercher des chaînes de caractères communes entre deux colonnes... en gros j'ai besoin de ratisser large dans ma jointure pour être certain de ne pas louper des rapprochement à cause d'une mauvaise saisie en rapport au nom de l'entreprise déclarée officiellement...

    Quelqu'un à une idée du code ?

    Merci

  4. #4
    Membre à l'essai
    Inscrit en
    septembre 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 16
    Points : 13
    Points
    13

    Par défaut

    en résumé je cherche :

    table A:RAISON_SOCIALE ==> base B: %RAISON_SOCIALE%...

  5. #5
    Membre confirmé
    Inscrit en
    novembre 2009
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 328
    Points : 626
    Points
    626

    Par défaut Dernier mot d'une chaîne de caractères

    Bonjour,

    Si le nom de l'entreprise est toujours en dernière position, vous pouvez utiliser la fonction word() du package stringr :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    > baseinsee <- data.frame(RAISON_SOCIALE=c("VETEMENTS JARDI","IKEA"),
    +                         CODE_COMMUNE_INSEE=c("13068","75002"))
    > 
    > extractcomptesclients <- data.frame(RAISON_SOCIALE=c("VETEMENT JARDI","SOCIETE IKEA"),
    +                                     CODE_COMMUNE_INSEE=c("13068","75002"))
    > 
    > library(stringr)
    > baseinsee$RAISON_SOCIALE2 <- word(baseinsee$RAISON_SOCIALE,-1)
    > extractcomptesclients$RAISON_SOCIALE2 <- word(baseinsee$RAISON_SOCIALE,-1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    > baseinsee
       RAISON_SOCIALE CODE_COMMUNE_INSEE RAISON_SOCIALE2
    1 VETEMENTS JARDI              13068           JARDI
    2            IKEA              75002            IKEA
    >
    > extractcomptesclients
      RAISON_SOCIALE CODE_COMMUNE_INSEE RAISON_SOCIALE2
    1 VETEMENT JARDI              13068           JARDI
    2   SOCIETE IKEA              75002            IKEA
    Pour comparer tous les mots vous pouvez peut-être vous inspirer de ce message mais il doit y avoir plusieurs sociétés dont le nom contient les mots "SOCIETE" ou "VETEMENTS"...

    Cordialement,

  6. #6
    Membre à l'essai
    Inscrit en
    septembre 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 16
    Points : 13
    Points
    13

    Par défaut

    Super merci.En fait j'ai utilisé la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    baseinsee$RAISON_SOCIALE2 <- word(baseinsee$RAISON_SOCIALE,-1)
    qui me ramène le dernier mot .je fais autant de colonne que de mots dans la raison sociale. je fais la même chose dans ma deuxième table et je les compares deux à deux. cela fait beaucoup de combinaisons mais cela fonctionne et e ralentit pas le traitement.

    Un grand merci !

  7. #7
    Membre confirmé
    Inscrit en
    novembre 2009
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 328
    Points : 626
    Points
    626

    Par défaut Fonction separate du package tidyr

    Bonjour,

    Vous pouvez aussi utiliser la fonction separate() du package tidyr pour créer une variable par mot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    > baseinsee <- data.frame(RAISON_SOCIALE=c("VETEMENTS JARDI","IKEA"),
    +                         CODE_COMMUNE_INSEE=c("13068","75002"))
    > library(tidyr)
    > baseinsee <- separate(data=baseinsee,col=RAISON_SOCIALE,
    +                       into=c("RAISON_SOCIALE1","RAISON_SOCIALE2"),
    +                       remove=FALSE,fill="right")
    > baseinsee
       RAISON_SOCIALE RAISON_SOCIALE1 RAISON_SOCIALE2 CODE_COMMUNE_INSEE
    1 VETEMENTS JARDI       VETEMENTS           JARDI              13068
    2            IKEA            IKEA            <NA>              75002
    NB : Concernant la fonction str_word(), vous pouvez commencer par le premier mot en écrivant 1 plutôt que -1.

    Cordialement,

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/03/2010, 10h58
  2. Réponses: 3
    Dernier message: 26/07/2006, 15h58
  3. Dégradé sur une chaine de caractères avec 3 a 4 couleurs
    Par avogadro dans le forum Composants VCL
    Réponses: 6
    Dernier message: 31/03/2006, 14h21
  4. Lecture d'une chaine de caractère avec fgets
    Par mayoouketchup dans le forum Fonctions
    Réponses: 9
    Dernier message: 22/12/2005, 17h17
  5. Réponses: 2
    Dernier message: 06/12/2002, 08h50

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