R:使用j中的match在两个data.tables之间移动数据

问题描述

我有这些可重复的数据:

retrieved

我想在dt1中创建一个名为toget的列,以根据keykey2的第一个匹配项从dt2的行号中检索match的值


编辑:将我的简单join解决方案与Akrun更加优雅的match进行基准测试,显示了基于简单> microbenchmark( + dt1[,toget:= dt2[,toget[match(key,key2)]]],+ dt1[dt2,toget := toget,on = .(key = key2),mult = "first"] + ) Unit: microseconds expr min lq mean median uq max neval dt1[,`:=`(toget,dt2[,key2)]])] 433.2 444.55 477.485 455.45 470.45 1125.6 100 dt1[dt2,toget),mult = "first"] 624.3 637.70 665.088 648.70 679.60 819.0 100 的简单解决方案的速度优势...想知道为什么

> dt1[,key2)]]]
> dt1
   cola colb key toget
1:    a    k  ak     A
2:    b    l  bl     B
3:    c    m  cm     C

解决方法

是的,我刚刚找到了,下面的作品

{{1}}
,

我们可以使用联接

library(data.table)
dt1[dt2,toget := toget,on = .(key = key2),mult = "first"]