merge

Questions sur les objets de R et la manipulation des données

Modérateur : Groupe des modérateurs

LA haumont
Messages : 41
Enregistré le : 16 Mai 2006, 09:33

merge

Messagepar LA haumont » 04 Juil 2006, 10:08

Je voulais savoir ce que désignais exactement le "ALL" dans la fonction merge?
merci

Tillard
Messages : 87
Enregistré le : 17 Déc 2004, 10:32

argument all de la fonction merge

Messagepar Tillard » 04 Juil 2006, 14:23

Bonjour

Code : Tout sélectionner

Je voulais savoir ce que désignais exactement le "ALL" dans la fonction merge?


exactement ?: TOUT :-)
cette option précise qu'on retient dans l'objet final issu de merge(X,Y) toutes les observations de X, toutes les observations de Y, qu'elles soient en commun ou pas.

exemple

Code : Tout sélectionner

X <- data.frame(lettre=c("A","B","B","C","C"), num=1:5)
Y <- data.frame(lettre=c("A","B","B","C","C","D","E","F"), num=1:8)
merge(X,Y,by=c("lettre","num"),all=T)

    lettre num
1      A   1
2      B   2
3      B   3
4      C   4
5      C   5
6      D   6
7      E   7
8      F   8

merge(X,Y,by=c("lettre","num"))

  lettre num
1      A   1
2      B   2
3      B   3
4      C   4
5      C   5



amicalement
Emmanuel Tillard
UMR ERRC (Elevage des Ruminants en Regions Chaudes)
CIRAD - St PIERRE (La Réunion)
tel: 02 62 49 92 54

Remy Duchemin
Messages : 63
Enregistré le : 21 Mai 2011, 18:55

Utilisation de la fonction Merge

Messagepar Remy Duchemin » 12 Juil 2011, 09:21

Bonjour,

Je souhaiterais faire un "merge" particulier.
En effet, j'ai trois vecteurs que je regroupe dans une base :

X1 <- c(1:6)
X2 <- c(1,3,6)
X3 <- c(22:24)

base <- data.frame(X2,X3)

base

j'obtiens ceci :
X2 X3
1 1 22
2 3 23
3 6 24

Et je souhaiterais avoir :

X1 X3
1 1 22
2 2 0
3 3 23
4 4 0
5 5 0
6 6 24

j'ai essayé : tt<-merge(base,X1) mais j'obtiens quelque chose de différent.
Pouvez-vous s'il vous plait m'apporter de l'aide?

Dans cette attente, merci par avance,

Cordialement

matthieu faron
Messages : 569
Enregistré le : 16 Fév 2011, 11:23

Messagepar matthieu faron » 12 Juil 2011, 09:47

Vous pouvez essayer :

Code : Tout sélectionner

X1 <- c(1:6)
X2 <- c(1,3,6)
X3 <- c(22:24)

base <- data.frame(X1)
base$X3[X2] <- X3
base$X3[-X2] <- 0
> base
  X1 X3
1  1 22
2  2  0
3  3 23
4  4  0
5  5  0
6  6 24
Matthieu FARON

Remy Duchemin
Messages : 63
Enregistré le : 21 Mai 2011, 18:55

Messagepar Remy Duchemin » 12 Juil 2011, 13:27

Merci pour votre réponse.
Mon problème est légerement différent de mon exemple fictif. En effet, je n'ai pas des vecteurs séparés.
Dans mon problème j'ai une base de données, regroupant X2 et X3.
Je veux ajouter les 2, 4 et 5 qui manquent dans X2 et mettre des 0 dans X3.
Votre solution est un début de piste pour moi, mais je ne peux pas l'appliquer. Du moins, je suis obliger de tout désagréger en vecteur...

Existe t'il une solution qui puisse me faire passer de la base :

X2 X3
1 1 22
2 3 23
3 6 24

à la base :
X1 X3
1 1 22
2 2 0
3 3 23
4 4 0
5 5 0
6 6 24

En restant avec un data.frame.

Dans l'attente de votre aide je vous remercie par avance.
Cordialement

matthieu faron
Messages : 569
Enregistré le : 16 Fév 2011, 11:23

Messagepar matthieu faron » 12 Juil 2011, 14:01

Je maintiens ma solution si les conditions suivantes sont remplies :

X1 est bien les nombres de 1 à x (=6 par exemple) dans l'ordre

X2 est bien aussi un entier dont le numéro correspond à X1

On peut alors recréer X1 en data.frame si on veut :

Code : Tout sélectionner

> X1 <- data.frame(X1 = 1:6)
> X1
  X1
1  1
2  2
3  3
4  4
5  5
6  6


On utilise les valeurs contenus dans X2 pour indexer les résultats à changer dans la colonne X3 (que l'on crée dans le data.frame X1 par la même occasion ):

Code : Tout sélectionner

> X1$X3[X2] <- X3
> X1
  X1 X3
1  1 22
2  2 NA
3  3 23
4  4 NA
5  5 NA
6  6 24


Tu veux mettre des zéros dans les cases où on n'avait pas d'information (c'est à dire d'index tous sauf donc - X2)

Code : Tout sélectionner

> X1$X3[-X2] <- 0
> X1
  X1 X3
1  1 22
2  2  0
3  3 23
4  4  0
5  5  0
6  6 24


Si les 2 conditions énoncés au début sont remplies, c'est à mon avis une des solutions les plus simples tout en restant en data.frame.
Sinon il faut envisager l'utilisation d'une boucle avec les valeurs de X1 comme itération et assigner la valeur correspondantes de X3...
Matthieu FARON

KS [Compte désactivé]
Messages : 35
Enregistré le : 09 Oct 2013, 18:37

Re: argument all de la fonction merge

Messagepar KS [Compte désactivé] » 25 Oct 2013, 11:55

bonsoir , je suis nouvelle sur ceforum , je viens de m'initier à R c pas compliquer mais il faux s'exercer, bref je voudrais fusionner deux table sous r coment faire d'abord pour les importé de xls et quel est le code utliser pour la fonction merge entre deux tables
merci a vous
$
Tillard a écrit :Bonjour

Code : Tout sélectionner

Je voulais savoir ce que désignais exactement le "ALL" dans la fonction merge?


exactement ?: TOUT :-)
cette option précise qu'on retient dans l'objet final issu de merge(X,Y) toutes les observations de X, toutes les observations de Y, qu'elles soient en commun ou pas.

exemple

Code : Tout sélectionner

X <- data.frame(lettre=c("A","B","B","C","C"), num=1:5)
Y <- data.frame(lettre=c("A","B","B","C","C","D","E","F"), num=1:8)
merge(X,Y,by=c("lettre","num"),all=T)

    lettre num
1      A   1
2      B   2
3      B   3
4      C   4
5      C   5
6      D   6
7      E   7
8      F   8

merge(X,Y,by=c("lettre","num"))

  lettre num
1      A   1
2      B   2
3      B   3
4      C   4
5      C   5



amicalement

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 01 Nov 2013, 10:54

Merci de ne pas "déterrer" de vieux sujets. Poster dans la rubrique "Questions en cours" et respecter les consignes: voir les post-it du forum.
Renaud


Retourner vers « Archives : Manipulation de données avec R »

Qui est en ligne

Utilisateurs parcourant ce forum : MameOusamane SY et 0 invité