Bonjour,
Je pense que le nom de ton post n'est pas vrai merge fonctionne très bien mais pas dans ton cas, en effet merge ici va faire le produit cartésien des deux si tu merges par "nom", ce qui est logique car pour une valeur toto de D1 il existe plusieurs valeurs toto dans D2. R ne peut pas faire correspondre a ce moment la la première toto de D1 à la première valeur toto de D2, la deuxième valeur toto de D1 à la deuxième valeur toto de D2, etc ... je ne pense pas que merge soit fait pour ça (mais je n'utilise que très peu cette fonction).
Un petit exemple :
Code : Tout sélectionner
ted1
nom v1
1 toto a
2 toto b
3 titi a
4 titi b
5 titi c
ted2
nom v2
1 toto u
2 toto v
3 toto w
4 titi x
5 titi y
6 titi z
7 titi t
merge(ted1,ted2,by = "nom")
nom v1 v2
1 titi a x
2 titi a y
3 titi a z
4 titi a t
5 titi b x
6 titi b y
7 titi b z
8 titi b t
9 titi c x
10 titi c y
11 titi c z
12 titi c t
13 toto a u
14 toto a v
15 toto a w
16 toto b u
17 toto b v
18 toto b w
ted1[,3] <- c(1:2,4:6)
ted2[,3] <- 1:7
ted1
nom v1 V3
1 toto a 1
2 toto b 2
3 titi a 4
4 titi b 5
5 titi c 6
ted2
nom v2 V3
1 toto u 1
2 toto v 2
3 toto w 3
4 titi x 4
5 titi y 5
6 titi z 6
7 titi t 7
merge(ted1,ted2,by = c("V3","nom"),all=TRUE)
V3 nom v1 v2
1 1 toto a u
2 2 toto b v
3 3 toto <NA> w
4 4 titi a x
5 5 titi b y
6 6 titi c z
7 7 titi <NA> t
Dans le dernier cas ça a un sens car une seule valeur de ted1$V3 fait référence à une seule valeur de ted2$V3.
Après j'avoue ne pas savoir comment faire pour récupérer rapidement dans ce cas les correspondances entre D1 et D2.
Maxime