2014-03-31 68 views
2

我有兩個數據幀:X包含兩列:甲& B:匹配號碼

A  B 
4  1 
6  2 
9  2 
10  3 
15  3 

數據幀y中包含若干列,其中它們中的兩個在我的分析是感興趣:

C  D 
6  549 
15  631 
4  344 
10  209 

請注意,數據幀y中的列C包含數據幀x的列A中可用值的一些(但不是全部)值。

我想要做的是找到x $ A和y $ D匹配的行,然後將D列中的對應值添加到我的數據框x中。因此,所產生的X會是什麼樣子:

A  B D 
4  1 344 
6  2 549 
9  2 NA 
10  3 209 
15  3 631 
+0

您正在尋找'merge()'。 – joran

+0

或者當你說'x $ A和y $ D [sic]'之間有匹配時,你幾乎可以直接將它轉換成你想要的:'x $ D < - y [match(x $ A,y $ C ),'D']' – rawr

回答

3

您可以指定一個普通列merge,這是必須在這裏完成。

merge(x, y, by.x='A', by.y='C', all=TRUE) 
    A B D 
1 4 1 344 
2 6 2 549 
3 9 2 NA 
4 10 3 209 
5 15 3 631 

缺省情況下,使用merge列名的交點來指定兩個數據幀之間的公共列。如果沒有共同的列名稱,或者這是不正確的設置,則必須用byby.xby.y指定。

+0

非常感謝您的明確解釋。 –

0

merge(x, y, by.x = "A", by.y = "C", all = TRUE)

+0

非常感謝,它完成了工作:) –