我一直在尋找解決方案並一直在嘗試,但似乎無法執行我應該做的簡單任務。通過至少兩列中的一個匹配合並數據幀
我有兩個數據幀格式化類似於下面玩具實例
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 ==「貓」或B ==「小貓」將被映射到列D中的1,任何具有A ==「狗」或B ==「小狗」的行將被映射到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行每行數千行,所以可以縮放的解決方案就是我真正需要的。
你已經取得相當大的你的榜樣。小心使它更容易複製/粘貼到R?以下是有關如何執行此操作的一些提示:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – 2013-04-30 06:25:19
您的示例輸出與您的說明不符。不應該列「D」是'c(1,2,2,1)'? – A5C1D2H2I1M1N2O1R2T1 2013-04-30 06:27:49
你完全正確,我已經對此進行了修改以避免混淆。謝謝。 – Starcalibre 2013-04-30 06:40:29