merge / join

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

Marine Duperat
Messages : 25
Enregistré le : 14 Avr 2016, 07:54

merge / join

Messagepar Marine Duperat » 14 Avr 2016, 08:42

Bonjour à tous,

j'ai un petit problème avec la fonction merge (ou la fonction join ..)
J'ai deux data.frame à joindre entre eux.
Le premier "mflore" contient des indications sur des relevés floristiques (localisation, date etc), le second "bf" est une base de données sur les traits de vie des espèces ....
J'aimerais associés les traits de vie de "bf" à mes espèces trouvées dans "mflore".
Les colonnes correspondantes pour la jointure sont:

Code : Tout sélectionner

bf$Nom.Phytobase
mflore$espece


J'ai tapé :

Code : Tout sélectionner

test<-merge(bf,mflore,by.y="espece",by.x="Nom.Phytobase", all.x=F, all.y=T)


Et j'obtiens un énorme data.frame contenant entièrement bf et mflore. Hors j'aimerais entièrement mflore et UNIQUEMENT les especes de bf qui sont identiques à mflore (et non toutes les espèces de la base de données).
Une idée ? je pensais qu'en écrivant:

Code : Tout sélectionner

all.x=F, all.y=T
cela ferait le tri mais apparemment ce n'est pas le cas ...

EDIT : suite à un commentaire j'ai tenté de passer par la fonction "join", voila ce que ça me donne ...
J'ai modifié le nom de ma colonne dans bf pour qu'elle corresponde à celle dans mflore et j'ai tapé ça:

Code : Tout sélectionner

> test2<-join(mflore,bf,by="espece",type="inner")
> summary(test2)
            site                date        localisation       modalite     
              :620060             :620060   andain:  3516          :620060 
 Escource     : 20722   11/09/2012: 21092   ligne : 57206   HE     : 18542 
 Haguenau_P150: 11984   02/09/2015:  9004         :620060   3B     : 17992 
 Solferino    : 11340   23/09/2014:  4986   NA's  :   392   SR     : 14212 
 Haguenau_P32 :  5098   01/09/2015:  3296                   CV     :  4274 
 Villecartier :  4704   16/09/2014:  2254                   (Other):  5702 
 (Other)      :  7266   (Other)   : 20482                   NA's   :   392 


Je me retrouve avec plus de 620 000 lignes, alors quand dans mon tableau initial j'en ai environs 35 000

Code : Tout sélectionner

summary(mflore)
            site              date       localisation      modalite          PU       
 Villecartier :6328   12/09/2013: 2534   andain: 3302   SR     :7194   Min.   : 1.000 
 Rennes       :4832   10/09/2013: 2314   ligne :29978   3B     :7124   1st Qu.: 4.000 
 Escource     :4526   16/09/2014: 2074         :  862   CV     :5430   Median : 8.000 
 Bord Louviers:4450   06/09/2012: 1720   NA's  :  544   LO     :5078   Mean   : 8.191 
 Solferino    :3846   17/09/2014: 1348                  HE     :4532   3rd Qu.:12.000 
 Haguenau_P150:3436   17/09/2013: 1338                  (Other):4784   Max.   :18.000 
 (Other)      :7268   (Other)   :23358                  NA's   : 544   NA's   :860


Hors vu que je veux ajouter des colonnes de modalités à mes lignes déjà existantes, pourquoi je me retrouve avec autant de lignes ? J'ai du oublier quelque chose dans ma formule ?
Marine.

Dujaric Marie-E
Messages : 38
Enregistré le : 18 Fév 2016, 09:27

Re: Problème avec merge

Messagepar Dujaric Marie-E » 14 Avr 2016, 11:40

Bonjour,

Ce sujet a été récemment traité sur le forum : http://forums.cirad.fr/logiciel-r/viewtopic.php?f=3&t=7950,

Bon courage

Marine Duperat
Messages : 25
Enregistré le : 14 Avr 2016, 07:54

Re: Problème avec merge

Messagepar Marine Duperat » 14 Avr 2016, 11:59

Merci, je vais regarder ça, je suis totalement passée à coté.
Désolée !
Marine.

Marine Duperat
Messages : 25
Enregistré le : 14 Avr 2016, 07:54

Re: Problème avec merge

Messagepar Marine Duperat » 14 Avr 2016, 12:58

J'ai testé la fonction "join". Il y a du mieux mais j'ai toujours un probleme, je me retrouve avec un nombre de ligne largement supérieur à mon tableau initial et je ne comprends pas pourquoi.
J'ai modifié le nom de ma colonne dans bf pour qu'elle corresponde à celle dans mflore et j'ai tapé ça:

Code : Tout sélectionner

> test2<-join(mflore,bf,by="espece",type="inner")
> summary(test2)
            site                date        localisation       modalite     
              :620060             :620060   andain:  3516          :620060 
 Escource     : 20722   11/09/2012: 21092   ligne : 57206   HE     : 18542 
 Haguenau_P150: 11984   02/09/2015:  9004         :620060   3B     : 17992 
 Solferino    : 11340   23/09/2014:  4986   NA's  :   392   SR     : 14212 
 Haguenau_P32 :  5098   01/09/2015:  3296                   CV     :  4274 
 Villecartier :  4704   16/09/2014:  2254                   (Other):  5702 
 (Other)      :  7266   (Other)   : 20482                   NA's   :   392 


Je me retrouve avec plus de 620 000 lignes, alors quand dans mon tableau initial j'en ai environs 35 000

Code : Tout sélectionner

summary(mflore)
            site              date       localisation      modalite          PU       
 Villecartier :6328   12/09/2013: 2534   andain: 3302   SR     :7194   Min.   : 1.000 
 Rennes       :4832   10/09/2013: 2314   ligne :29978   3B     :7124   1st Qu.: 4.000 
 Escource     :4526   16/09/2014: 2074         :  862   CV     :5430   Median : 8.000 
 Bord Louviers:4450   06/09/2012: 1720   NA's  :  544   LO     :5078   Mean   : 8.191 
 Solferino    :3846   17/09/2014: 1348                  HE     :4532   3rd Qu.:12.000 
 Haguenau_P150:3436   17/09/2013: 1338                  (Other):4784   Max.   :18.000 
 (Other)      :7268   (Other)   :23358                  NA's   : 544   NA's   :860


Hors vu que je veux ajouter des colonnes de modalités à mes lignes déjà existantes, pourquoi je me retrouve avec autant de lignes ? J'ai du oublier quelque chose dans ma formule ?

Désolée je débute et c'est la première fois que je dois traiter de si gros jeux de données...
J'ai édité mon premier message pour que ce soit plus clair pour les nouveaux arrivant sur la discussion ..

Merci d'avance,
Marine.


Retourner vers « Questions en cours »

Qui est en ligne

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