连接两个数据表并仅使用R中第二个dt中的一个列

use*_*059 6 merge join r data.table

编辑使其更清洁.假设我有两个数据表(dt1和dt2),我想使用数据表获取dt3.A,B,C,E,F,G,H是列名.dt1键是列A,dt2键是列E.数据表具有不同的行数.我想保留DT1中的所有列,并且只将一个列(H)从DT2添加到已连接的数据表中.最终,我将它存储为DT1(虽然我在下面显示为dt3).

如何使用数据表实现它?我有一个丑陋的解决方案与合并+数据框架.

dt1 
A   B   C   
1   4   7   
2   5   8   
3   6   9   
2   20  21

dt2
E   F   G   H
1   10  13  16
3   12  15  18    
2   11  14  17


dt3
A   B   C   H
1   4   7   16
2   5   8   17
3   6   9   18
2   20  21  17          
Run Code Online (Sandbox Code Playgroud)

Dav*_*urg 17

为了进行左连接df1并添加H从列df2,你可以结合二元加入参照更新操作(:=)

setkey(setDT(dt1), A) 
dt1[dt2, H := i.H]
Run Code Online (Sandbox Code Playgroud)

有关其工作原理的详细说明,请参见此处此处


使用devel版本(v> = 1.9.5)我们可以通过指定key内部setDT(由@Arun指向)使其更短

setDT(dt1, key = "A")[dt2, H := i.H]
Run Code Online (Sandbox Code Playgroud)

编辑24/7/2015

您现在可以使用新on参数运行二进制连接而无需设置键

setDT(dt1)[dt2, H := i.H, on = c(A = "E")]
Run Code Online (Sandbox Code Playgroud)