Fusion de data.frame

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

Anais Payen
Messages : 60
Enregistré le : 25 Fév 2019, 08:50

Fusion de data.frame

Messagepar Anais Payen » 18 Mar 2019, 10:26

Bonjour,

Il y a une question auquelle je ne trouve pas de réponse.

J'ai 2 data.frame:
- df1 : une avec des codes et des intitulés pour ces codes
- df2 : une où je n'ai que des codes

Je souhaiterai faire correspondre les codes de mon df2 avec les intitulés de mon df1, pour cela je connais la fonction merge.

Mais comment conserver les codes qui n'ont pas de correspondance? Car je vais devoir leur chercher un intitulé pour compléter mon df1.

Par avance, je vous remercie

Anaïs

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: Fusion de data.frame

Messagepar François Bonnot » 18 Mar 2019, 10:38

Bonjour,

Code : Tout sélectionner

merge(df2,df1,all.x=TRUE)
François

Anais Payen
Messages : 60
Enregistré le : 25 Fév 2019, 08:50

Re: Fusion de data.frame

Messagepar Anais Payen » 18 Mar 2019, 10:53

François Bonnot a écrit :Bonjour,

Code : Tout sélectionner

merge(df2,df1,all.x=TRUE)


Je viens d'essayer votre formule et j'ai obtenu cette réponse :
> ATCa_med9 <- merge(med9,ATC_antoine,all.x=TRUE)
Erreur : vecteurs de mémoire épuisés (limite atteinte ?)


R attribut des valeurs à mes codes sans intitulé?

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Fusion de data.frame

Messagepar Pierre-Yves Berrard » 18 Mar 2019, 11:33

Bonjour,

Il manque le "by" :

Code : Tout sélectionner

merge(df2, df1, by = "code", all.x = TRUE)
PY

Anais Payen
Messages : 60
Enregistré le : 25 Fév 2019, 08:50

Re: Fusion de data.frame

Messagepar Anais Payen » 18 Mar 2019, 13:18

Pierre-Yves Berrard a écrit :Bonjour,

Il manque le "by" :

Code : Tout sélectionner

merge(df2, df1, by = "code", all.x = TRUE)


Bonjour, effectivement si j'oublie de donner la colonne sur laquelle se baser...

Merci pour vos réponses!

Est il possible d'avoir un data.frame qui ne me donne que les lignes où je n'ai pas de correspondance?

J'ai essayé de faire une condition :
if (any (ATC_antoine$CIP13 == "med9_s$cip13")) ATC_antoine$recherche <- ifelse(ATC_antoine$CIP13 == "med9_s$cip13", 1, 0)

Mais je pense que la valeur "med9_s$cip13" ne peut pas être trouvée...

je sais que ce code me permet simplement de mettre 1/0 en bout de lignes pour savoir s'il y a une correspondance, mais cela me permettrait de trier plus facilement les lignes sans correspondance.

Merci d"avance

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Fusion de data.frame

Messagepar Pierre-Yves Berrard » 18 Mar 2019, 13:52

Les arguments all.x et all.y de merge ne permettent pas de faire cela immédiatement.

Vous pouvez au choix :
  • chercher les lignes où le libellé est vide (is.na) dans le data.frame fusionné
  • utiliser le package dplyr : dplyr::anti_join(df2, df1, by = "code")
PY

Anais Payen
Messages : 60
Enregistré le : 25 Fév 2019, 08:50

Re: Fusion de data.frame

Messagepar Anais Payen » 18 Mar 2019, 14:04

J'ai essayé la deuxième fonction du package dplyr, et c'est parfait!

Merci pour votre temps et vos réponses!

Bon après midi!

Anais Payen
Messages : 60
Enregistré le : 25 Fév 2019, 08:50

Re: Fusion de data.frame

Messagepar Anais Payen » 18 Mar 2019, 14:18

Et toujours dans la suite de mes data.frames, je souhaiterais faire un rbind de 2 df qui ont des données différentes.

Le souci c'est qu'ils n'ont pas le même nombre de colonnes..
J'avais à la base sélectionné des colonnes d'intérêt mais en fait je perds des informations qui me seront utiles par la suite et je ne le souhaite pas.

Existe-t-il une autre façon de procéder?


Merci d'avance

Anais Payen
Messages : 60
Enregistré le : 25 Fév 2019, 08:50

Re: Fusion de data.frame

Messagepar Anais Payen » 18 Mar 2019, 14:53

Si je ne dis pas de bêtises, il me semble que la fonction bind.rows fasse ce travail!

Ou plutôt, elle l'a fait, mais depuis toute à l'heure, je reçois ce message d'erreur:
Warning messages:
1: In bind_rows_(x, .id) : Unequal factor levels: coercing to character
2: In bind_rows_(x, .id) :
binding character and factor vector, coercing into character vector
3: In bind_rows_(x, .id) :
binding character and factor vector, coercing into character vector
4: In bind_rows_(x, .id) : Unequal factor levels: coercing to character
5: In bind_rows_(x, .id) :
binding character and factor vector, coercing into character vector
6: In bind_rows_(x, .id) :
binding character and factor vector, coercing into character vector


Quelqu'un peut il m'éclairer?

Par avance merci!

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Fusion de data.frame

Messagepar Pierre-Yves Berrard » 18 Mar 2019, 22:56

Pour empêcher les problèmes liés aux facteurs, spécifier l'option stringsAsFactors = FALSE lors de l'import des données (read.csv...).
PY

Anais Payen
Messages : 60
Enregistré le : 25 Fév 2019, 08:50

Re: Fusion de data.frame

Messagepar Anais Payen » 19 Mar 2019, 09:38

Pierre-Yves Berrard a écrit :Pour empêcher les problèmes liés aux facteurs, spécifier l'option stringsAsFactors = FALSE lors de l'import des données (read.csv...).



Comme toujours, vos solutions fonctionnent :) je vous en remercie.

Je ne comprends pas ce à quoi cela correspond... Auriez vous un lien ou une explication? J'ai lu différentes explications que je n'ai toujours pas saisies...

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Fusion de data.frame

Messagepar Pierre-Yves Berrard » 19 Mar 2019, 09:52

Par défaut, read.csv (et beaucoup d'autres fonctions) crée des facteurs pour les variables non numériques.

Les facteurs peuvent être contraignants quand on veut combiner des données ayant des modalités différentes (ce qui est le cas avec bind_rows dans votre cas). stringsAsFactors=FALSE empêche la conversion de chaînes de caractères en facteurs.
PY

Anais Payen
Messages : 60
Enregistré le : 25 Fév 2019, 08:50

Re: Fusion de data.frame

Messagepar Anais Payen » 19 Mar 2019, 09:56

Merci pour le lien et pour vos explications! Ainsi que votre temps :)

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Fusion de data.frame

Messagepar Pierre-Yves Berrard » 19 Mar 2019, 10:24

Anais Payen a écrit :Comme toujours, vos solutions fonctionnent :) je vous en remercie.

C'est parce que j'ai déjà rencontré tous ces messages d'erreur. ;-)
PY


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité