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:
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:
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:
Rech<-filter(Rech,str_detect(RAISON_SOCIALE,".IKEA."))
Mais comment faire sur plusieurs enregistrement ?
Merci de votre aide
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:
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:
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,
Fonction separate du package tidyr
Bonjour,
Vous pouvez aussi utiliser la fonction separate() du package tidyr pour créer une variable par mot :
Code:
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,