2015-01-07 76 views
-1

不同的長度和不同的列水平兩個數據幀我有合併兩個數據幀與小數據幀是優先考慮下面的例子請了一個問題:合併與R中

d1 
x y 

a 4 
b 5 
c 9 


d2 
y z 

5 2 
7 8 
9 3 
4 1 
6 8 

我想要得到相同如果如下所示長度爲小數據幀長度d2爲d1 = Y列Y的列:

merged 
y x z 

4 a 1 
5 b 2 
9 c 3 

我寫了下面的代碼,但不似乎工作:

merged <- merge(d1, d2, by.x="y", by.y="y") 

任何人都可以幫忙嗎?

謝謝。

+1

'合併(df1,df2)'應該這樣做。我的代碼也得到了正確的結果。什麼對它不起作用?什麼是錯誤信息? –

+0

「警告消息:在merge.data.frame(d1,d2,by.x =」y「,by.y =」y「)中:列名稱'y'在結果中被複制」並給我「5」行而不是3. – aliocee

+0

@aliocee你有沒有試過RichardScriven建議的那個。它應該得到你想要的。如果你想指定'by',它應該是'merge(df1,df2,by ='y')',你的代碼也會給出結果而沒有任何警告。你應該提供一個給出警告的例子,但事實並非如此。 – akrun

回答

1

如果顛倒數據集的順序,如你可以在輸出中的5行:

d1$z<-d2$z[match(d1$y,d2$y)] 

merge(d2, d1, by="y") 

你可以通過附加列z添加到d1您收到的警告表明兩個數據集中有相同名稱的列,這些列並不是您所匹配的列。若要查看字段名稱重疊,使用方法:

intersect(names(d1),names(d2)) 

(這恰好也是默認值參數by)。