Catégorisation de variables à partir d'une autre liste

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Lemaire Alexia
Messages : 2
Enregistré le : 25 Avr 2023, 09:16

Catégorisation de variables à partir d'une autre liste

Messagepar Lemaire Alexia » 26 Avr 2023, 09:12

Bonjour à tous,

Je suis novice sur R, et je commence à tourner en rond.

Je voudrais catégoriser des codes communes INSEE selon un découpage de densité médicale en 4 zones : ZIP, ZAC, HV, autres. Il ne peut y avoir qu’une seule valeur ZIP /ZAC/HV/autre pour un même code INSEE.

J’ai deux fichiers :
- Ma base de données avec les identifiants de séjours, les codes postaux et les codes communes INSEE des patients
- La liste des codes communes INSEE classées dans les différentes catégories évoquées ci-dessus (une première colonne avec le code INSEE, une deuxième avec le libellé de la commune et ensuite une colonne remplie avec les mentions ZIP, ZAC et HV.)

Je voudrais donc avoir dans ma base de données l’information de zonage en face des codes communes.
Dans l’idéal, j’aimerais avoir en sortie : l'identifiant du séjour, (éventuellement le code postal mais pas obligatoire), le code Insee, le zonage

J’ai essayé avec des ifelse encastrés, des multiconditions et des %in%, mais il doit me manquer des étapes car soit R ne me renvoie qu’un seul type de zonage, ou bien il me les renvoie tous, ou encore divers messages d’erreurs.

Merci d’avance pour votre aide,

Alexia

Maxime Deniaux
Messages : 70
Enregistré le : 11 Fév 2022, 22:49
Contact :

Re: Catégorisation de variables à partir d'une autre liste

Messagepar Maxime Deniaux » 26 Avr 2023, 09:51

Bonjour Alexia,

est-ce que tu pourrais mettre un exemple de tes 2 fichiers même avec des données fausses (exemple miniature, quelques lignes sous forme de vecteurs par exemple puis tu mets une ligne de code pour recréer les data.frames à partir de ces vecteurs ou on fait ces derniers nous même peut importe).

C'est juste histoire d'être sûr d'avoir une base de travail équivalente à la tienne.
Plus simple pour moi (et sûrement pour d'autres aussi) de t'aider dans cette situation, qu'actuellement où je ne suis pas persuadé d'avoir bien compris la structure (car fatigué, l'heure de manger !).

Mais peut-être auras-tu une réponse de quelqu'un qui a bien compris même sans, ça arrive parfois ! :)

Lemaire Alexia
Messages : 2
Enregistré le : 25 Avr 2023, 09:16

Re: Catégorisation de variables à partir d'une autre liste

Messagepar Lemaire Alexia » 26 Avr 2023, 12:33

Merci pour ta réponse.

Voici la structure des fichiers :

Pour ma base de données :
identifiant<-(1:5)
code_postal<-c(68000, 67540, 67200, 88000, 67120)
code_Insee<-c(68224,67365,67482,88160, 67300)
df<-data.frame(identifiant, code_Insee, code_postal)


Pour le fichier correspondant à la liste répertoriant le zonage :
code_Insee<-c(68224,67365,67482)
libellé<-c("Mulhouse","Ostwald","Strasbourg")
Zonage<- c("ZIP", "ZAC", "HV")
df<-data.frame(code_Insee, libellé, Zonage)

Par ailleurs, on m'a proposé ce midi d'utiliser un left joint en prenant le code INSEE comme clé de jointure, et ca semble prometteur :-)

Maxime Deniaux
Messages : 70
Enregistré le : 11 Fév 2022, 22:49
Contact :

Re: Catégorisation de variables à partir d'une autre liste

Messagepar Maxime Deniaux » 26 Avr 2023, 13:08

Lemaire Alexia a écrit :Merci pour ta réponse.

Voici la structure des fichiers :

Pour ma base de données :
identifiant<-(1:5)
code_postal<-c(68000, 67540, 67200, 88000, 67120)
code_Insee<-c(68224,67365,67482,88160, 67300)
df<-data.frame(identifiant, code_Insee, code_postal)


Pour le fichier correspondant à la liste répertoriant le zonage :
code_Insee<-c(68224,67365,67482)
libellé<-c("Mulhouse","Ostwald","Strasbourg")
Zonage<- c("ZIP", "ZAC", "HV")
df<-data.frame(code_Insee, libellé, Zonage)

Par ailleurs, on m'a proposé ce midi d'utiliser un left joint en prenant le code INSEE comme clé de jointure, et ca semble prometteur :-)



Merci pour l'exemple, j'étais un peu hors service !

Oui effectivement pour ce que tu souhaites faire (si j'ai bien compris en tout cas), un left_join est une solution classique.

Tu peux faire un df3 <- left_join(df1, df2, by = "code_Insee")

Il existe plusieurs types de jointure, celle-ci signifie qu'on va prendre les lignes de df1, puis ensuite on va regarder quelles sont les lignes dans df2 qui ont les valeurs code_Insee de df1.
S'il en existe (ici oui, ce sont chacune des lignes de df2 car elles ont les valeurs code_Insee 68224,67365,67482 présentes dans df1 mais tu aurais pu dans un autre exemple avoir des lignes de df2 n'ayant pas de valeur code_Insee dans df1) alors, les colonnes autres que celle de jointure (code_Insee) de df2 (libellé et Zonage) vont être "collées" à df1.
Biensûr, il y aura une valeur dans ces 2 colonnes seulement pour les lignes qui ont pu être associées.

Parfois ce n'est pas nécessaire de préciser le 3ème argument, R peut le deviner. C'est le cas ici car dans ton df1 et df2, seule une variable est en commun (code_Insee). Mais bon, en général c'est mieux de préciser quand-même, notamment si dans tes 2 data.frames, tu as plusieurs colonnes portant le même nom. Dans ce cas, si tu ne précises pas tu peux te retrouver à faire une jointure via une colonne que tu ne voulais pas.

Donc dans cet exemple, tu as au final 3 lignes avec le libellé et Zonage car l'association a été faite, mais 2 autres vides car aucune association faite car code_Insee non présents dans df2.


J'espère que c'était un minimum clair...de toute façon je pense que t'avais déjà un peu compris le principe en essayant. Dans la pire des cas, c'est du contenu que tu trouveras facilement sur internet avec des schémas. Ca sera plus simple !

Bonne fin de journée


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

cron