问题描述
我有这些可重复的数据:
retrieved
我想在dt1中创建一个名为toget
的列,以根据key
中key2
的第一个匹配项从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"]