2017-09-11 2 views
0

J'ai une trame de données comme ceci:Fusionner deux tables avec la même id

df1: 
    X1 X2 X3 
1 1 4 7 
2 2 5 8 
3 3 6 9 

class(df1[1,"X1"]) 

[1] "caractère"

Maintenant, j'ai une autre trame de données comme ceci:

df2: 
    id name 
1  1  A 
2  2  C 
3  3  B 
4  4  Z 
5  5  X 
6  6  G 
7  7  E 
8  8  Y 
9  9  H 

l'ID est ici numérique

Tous les caractères de df1 sont identiques à ceux de df2. Ceci est le résultat que j'ai besoin:

X1 X2 X3 
1 A Z E 
2 C X Y 
3 B G H 

Je sais que vous pouvez fusionner deux tables avec la même clé, mais dans ce cas, ma clé sur DF1 les données du tableau.

Répondre

2

Nous pouvons utiliser match pour cette

df1[] <- lapply(df1, function(x) df2$name[match(x, df2$id)]) 
df1 
# X1 X2 X3 
#1 A Z E 
#2 C X Y 
#3 B G H 
+0

Il fonctionne parfaitement, merci :) Bien que je ne suis pas trop familier avec la fonction lapply – Ching

+0

@Ching Il est juste aussi bien une boucle 'for', seule différence est que nous avons plus de contrôle à ce sujet. C'est avantageux dans certaines situations – akrun