我一直在寻找解决方案并一直在试验,但我似乎无法执行我应该做的简单任务。
我有两个数据框,其格式类似于以下玩具示例
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
我希望合并这两个数据集,使得输出为:
A B C D
1 cats kittens 88 1
2 dogs puppies 99 2
3 dogs NA 110 2
4 NA kittens 101 1
换句话说,任何带有标签 A=="cats" 或 B=="kittens" 的行都将被映射到 D 列中的 1,任何带有 A=="dogs" 或 B=="puppies" 的行都将被映射到 2。
我已经使用了命令
merge(DF1, DF2, by=c("A","B"), all.x=TRUE)
但是,这与第 3 行和第 4 行不匹配,仅第 1 行和第 2 行。我得到了输出
A B C D
1 cats kittens 88 1
2 dogs puppies 99 2
3 dogs NA 110 NA
4 NA kittens 101 NA
请注意,我正在使用的实际数据集非常长。实际上,DF1 超过 1,000,000 行,而 DF2 超过 300,000 行,每行数千行,因此我真正需要一个可以扩展的解决方案。