J'ai cherché une solution et j'ai expérimenté, mais je ne parviens pas à effectuer ce qui devrait être une tâche simple.
J'ai deux cadres de données formatés de la même manière que les exemples ci-dessous.
DF1 = data.frame(A=c("cats","dogs",NA,"dogs"), B=c("kittens","puppies","kittens",NA), C=c(88,99,101,110))
A B C
1 cats kittens 88
2 dogs puppies 99
3 NA kittens 101
4 dogs NA 110
DF2 = data.frame(D=c(1,2), A=c("cats","dogs"), B=c("kittens","puppies"))
D A B
1 1 cats kittens
2 2 dogs puppies
Je souhaite fusionner les deux ensembles de données de telle sorte que la sortie soit :
A B C D
1 cats kittens 88 1
2 dogs puppies 99 2
3 dogs NA 110 2
4 NA kittens 101 1
En d'autres termes, toutes les lignes dont l'étiquette est A=="chats" ou B=="chatons" seront affectées à 1 dans la colonne D, toutes les lignes dont l'étiquette est A=="chiens" ou B=="chiots" seront affectées à 2.
J'ai utilisé la commande
merge(DF1, DF2, by=c("A","B"), all.x=TRUE)
Cependant, cela ne correspond pas aux rangées 3 et 4 correctement, seulement aux rangées 1 et 2. J'obtiens le résultat suivant
A B C D
1 cats kittens 88 1
2 dogs puppies 99 2
3 dogs NA 110 NA
4 NA kittens 101 NA
Veuillez noter que les ensembles de données sur lesquels je travaille sont très longs. En réalité, DF1 compte plus de 1 000 000 de lignes et DF2 plus de 300 000 lignes, soit des milliers de lignes chacun. J'ai donc vraiment besoin d'une solution qui puisse être mise à l'échelle.