Rejoindre à gauche en utilisant data.table
Supposons que j'ai deux de données.tableau's:
Un:
A B
1: 1 12
2: 2 13
3: 3 14
4: 4 15
B:
A B
1: 2 13
2: 3 14
et j'ai le code suivant:
merge_test = merge(dataA, dataB, by="A", all.data=TRUE)
J'obtiens:
A B.x B.y
1: 2 13 13
2: 3 14 14
Cependant, je veux que toutes les lignes de dataA dans le final de la table fusionnée. Est-il un moyen de faire cela?
source d'informationauteur lord12
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer ceci:
Si vous souhaitez ajouter le
b
valeurs deB
àA
alors il est préférable de joindreA
avecB
et mise à jourA
par référence comme suit:qui donne:
C'est mieux appraoch que d'utiliser
B[A, on='a']
parce que ce dernier se contente d'afficher le résultat dans la console. Lorsque vous voulez obtenir les résultats dansA
vous devez utiliserA <- B[A, on='a']
qui vous donnera le même résultat.La raison pour laquelle
A[B, on = 'a', bb := i.b]
est mieux queA <- B[A, on = 'a']
est l'efficacité de mémoire. AvecA[B, on = 'a', bb := i.b]
l'emplacement deA
dans la mémoire reste le même:Tandis que de l'autre main avec
A <- B[A, on = 'a']
un nouvel objet est créé et enregistré dans la mémoire deA
et donc a un autre endroit dans la mémoire:À l'aide de
merge
(merge.data.table
) entraîne un changement similaire dans l'emplacement de mémoire:Pour la mémoire de l'efficacité, il est donc préférable d'utiliser un 'mise à jour par référence à rejoindre les" syntaxe:
Bien que ce n'est pas faire une différence appréciable avec de petits ensembles de données comme celles-ci, il y a une différence sur les grands jeux de données pour lesquels
data.table
a été conçu.Utilisé des données: