Jointure

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

Montana ROQUILLET
Messages : 24
Enregistré le : 24 Juil 2017, 06:39

Jointure

Messagepar Montana ROQUILLET » 11 Déc 2018, 09:42

Bonjour,

Je cherche à joindre deux tables verticalement venant de deux sources différentes (notifiées dans une colonne par 1 ou 2), et, lorsqu'il y a des doublons, pouvoir choisir la ligne que je garde en fonction de la source 1 (grosso modo j'ai besoin de tous les éléments de la source 1, et les lignes de la source 2 qui ne sont pas présentes dans la source 1).
Le package dplyr ne fonctionne pas sur ma version de R, et lorsque je fusionne les tables avec un merge et que je supprime ensuite les doublons, les lignes sont supprimées aléatoirement.

Merci de votre aide,

Montana

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

Re: Jointure

Messagepar Pierre-Yves Berrard » 11 Déc 2018, 10:11

Bonjour,
Pouvez-vous préciser comment les doublons apparaissent ? Normalement, la fonction merge ne génère pas de doublon (sur les variables identifiantes).
PY

Montana ROQUILLET
Messages : 24
Enregistré le : 24 Juil 2017, 06:39

Re: Jointure

Messagepar Montana ROQUILLET » 11 Déc 2018, 10:24

Bonjour,

Il s'agit de doublons par rapport à la colonne identifiant, autant pour moi j'ai oublié de le préciser.
Mon code pour vous donner une idée :

fusion <- merge(fichier_1, fichier_2, all=TRUE)
doublons <- which(duplicated(fusion$id))
fusion2 <- fusion[-doublons, ]

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

Re: Jointure

Messagepar Pierre-Yves Berrard » 11 Déc 2018, 11:01

Et en ajoutant

Code : Tout sélectionner

by = "nom_de_la_variable_identifiante"
dans le merge ?
PY

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

Re: Jointure

Messagepar François Bonnot » 11 Déc 2018, 13:44

Bonjour,
Une suggestion :

Code : Tout sélectionner

(df1 <- data.frame(source=1,ident=c('A','B','C'),valeur=1:3))
(df2 <- data.frame(source=2,ident=c('A','B','D'),valeur=c(1,3,4)))
(df <- merge(df1,df2,all=TRUE)) ## équivalent dans ce cas à df <- rbind(df1,df2)
df.s <- split(df,df["ident"])
df.s2 <- lapply(df.s,function(x) if (nrow(x)>1) x[x$source==1,] else x)
do.call(rbind,df.s2)
François

Montana ROQUILLET
Messages : 24
Enregistré le : 24 Juil 2017, 06:39

Re: Jointure

Messagepar Montana ROQUILLET » 12 Déc 2018, 10:27

J'ai réussi, merci de votre aide ! :)


Retourner vers « Questions en cours »

Qui est en ligne

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