jointure donne des NA

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

Jean-Emmanuel Longueville
Messages : 314
Enregistré le : 23 Fév 2011, 08:03

jointure donne des NA

Messagepar Jean-Emmanuel Longueville » 21 Juin 2024, 13:48

Bonjour,
J'utilise les fonction lef_join et right_join de dplyr et je viens de comprendre que pour un tableau de 256 lignes.
Edit : "Oui pardon j'ai oublié de préciser la jointure se passe mal et j'ai des NA qui apparaisse pour certaine ligne alors que les valeurs existent dans les 2 tableaux"
Bien que chaque ligne de jointure soit identifiée par un identifiant unique RFID de class "chr".

Voici un ecm sur une ligne :

Code : Tout sélectionner


structure
(list(xp_name structure(1Llevels c("Coc-Male"
<- structure(list(xp_name structure(1Llevels c("Coc-Male"
"Coc-Female""Hero-Female"), class = "factor"), RFID "955000004802300"
    
traitement "No drug"groupe "M-8-1"sexe "Male"
    
turn 357.5distance 29201.1037151171), class = c("tbl_df"
"tbl""data.frame"), row.names c(NA, -1L))

<- structure(list(RFID "955000004802300"experiment_id 1L
    
animal_name "Animal 6"groupe "M-8-1"traitement "sal"
    
end_xp structure(NA_real_, class = "Date"), sexe "Male"
    
tt_relapse "no drugs"n_rel structure(0, class = "integer64"), 
    
n_inj_relapse structure(0, class = "integer64")), class = "data.frame"row.names c(NA
-
1L))

right_join(a,b)
 

Je me suis aperçu en créant l'ecm qu'en supprimant des colonnes la jonction peut être correct.
Auriez vous une piste du pourquoi ?
Jean-Emmanuel
Ingénieur d'étude LNEC

Logez Maxime
Messages : 3141
Enregistré le : 26 Sep 2006, 11:35

Re: jointure donne des NA

Messagepar Logez Maxime » 21 Juin 2024, 14:07

Bonjour,

Je suis désolé mais en lisant ton mail je ne vois pas où est la question, je n'arrive pas à voir où ta jointure est "mauvaise".
J'utilise les fonction lef_join et right_join de dplyr et je viens de comprendre que pour un tableau de 256 lignes.
Il doit manquer un bout de la phrase pour que ça soit compréhensible.

Par défaut la jointure va prendre joindre sur tous les champs commun aux deux data.frames. Elle va aussi ajouter les informations contenues dans les colonnes qui n'ont pas servies à ta jointure.
Quand je prends ton exemple j'ai une jointure qui me donne une ligne avec les informations des colonnes de chaque tableau initial. Quand il y a des NA dans celles-ci, ils sont aussi présents dans la suite.

Cordialement,
Maxime

Jean-Emmanuel Longueville
Messages : 314
Enregistré le : 23 Fév 2011, 08:03

Re: jointure donne des NA

Messagepar Jean-Emmanuel Longueville » 21 Juin 2024, 14:52

Oui pardon mon ecm n'était pas fonctionnel..
Ce qu'il se passe c'est que certaine colonne ont après jointure des NA, pour certaine ligne mais pas toutes. Sans que je n'arrive à comprendre pourquoi certaine ligne n'ont pas de valeurs et les autres en ont.
Par exemple dans mon ecm les colonnes Turn et distance ont un NA après jointure alors que le tableau "a" possède des valeurs.
Jean-Emmanuel
Ingénieur d'étude LNEC

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

Re: jointure donne des NA

Messagepar Maxime Deniaux » 21 Juin 2024, 15:58

Bonjour,

en fait je pense que c'est ce que te disait Maxime.

Si tu ne précises rien dans ton code, la liste des variables sur laquelle la jointure va se faire est celle de toutes les variables communes entre les 2 tables.
Donc ici : RFID, traitement, groupe, sexe (c'est d'ailleurs affiché normalement en sortie de code)

Or, autant RFID, groupe, sexe ont les mêmes valeurs pour les 2 tables. Mais ce n'est pas le cas pour traitement.
Donc en fait il n'y a pas de "match" complet.

Tu te retrouves alors avec la ligne de ta table b (avec ses valeurs initiales), + des valeurs manquantes pour les colonnes pas présentes dans b mais dans a (donc turn et distance notamment) car pas de "match".

Tu peux tester en mettant right_join(a,b, by = c('RFID','groupe','sexe')), tu n'auras plus les valeurs manquantes pour turn et distance car 'match' complet
Par contre, tu auras une colonne dupliquée pour traitement.
Normalement : traitement.x et traitement.y

N'hésite pas à reposer une ou des questions si ce n'est pas clair.

En message comme ça ce n'est pas forcément évident

Logez Maxime
Messages : 3141
Enregistré le : 26 Sep 2006, 11:35

Re: jointure donne des NA

Messagepar Logez Maxime » 24 Juin 2024, 06:48

re,

Quand tu regardes en détail ce qui se passe, il te dit que la jointure s'est faite sur les colonnes RFID, traitement, groupe, sexe.
Dans l'exemple que tu as donné, le RFID est le même dans les deux tableaux, mais pas le traitement. Dans le tableau "b", celui qui sert de référence pour faire la jointure, puisque tu as choisi une "right_join", tu as "sal", alors que dans le tableau a, tu as "No drug". Donc il va conserver toutes les informations du tableau b, ajouter les colonnes du tableau a qui ne sont pas dans le tableau b et rajouter des NA à toutes ces colonnes additionnelles puisqu'il n'y a pas de correspondance entre les valeurs des 4 colonnes qui servent à faire la jointure.

Cordialement,
Maxime

Jean-Emmanuel Longueville
Messages : 314
Enregistré le : 23 Fév 2011, 08:03

Re: jointure donne des NA

Messagepar Jean-Emmanuel Longueville » 24 Juin 2024, 07:02

Merci messieurs pour votre éclairage ayant tellement la tête dans le guidon ce détail m'échappait.
Jean-Emmanuel
Ingénieur d'étude LNEC


Retourner vers « Questions en cours »

Qui est en ligne

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