R &引用;“模糊密钥匹配”;对于data.table合并
我正在尝试使用姓名字符串和经验度量来匹配每年的员工。经验每年最多只能增加一次,所以我想用它来帮助匹配其他指标失败的情况 例如:R &引用;“模糊密钥匹配”;对于data.table合并,r,data.table,R,Data.table,我正在尝试使用姓名字符串和经验度量来匹配每年的员工。经验每年最多只能增加一次,所以我想用它来帮助匹配其他指标失败的情况 例如: dt1<-data.table(name=c("jane doe","jane doe", "john doe","jane smith"), exp=c(0.,5,1,2),id=1:4,key="name") dt2<-data.table(name=c("jane doe",
dt1<-data.table(name=c("jane doe","jane doe",
"john doe","jane smith"),
exp=c(0.,5,1,2),id=1:4,key="name")
dt2<-data.table(name=c("jane doe","jane doe",
"john doe","jane smith"),
exp=c(0,30,1.5,2),key="name")
但这不起作用——这给了我:
> dt2
name exp id flag
1: jane doe 0.0 2 2
2: jane doe 30.0 NA NA
3: jane smith 2.0 4 4
4: john doe 1.5 3 3
它似乎没有正确地匹配后一个“简·多伊”,但似乎将第一个“简·多伊”匹配到了错误的前一个“简·多伊”。我不太清楚这是为什么;无论如何,似乎最好在加入之前而不是加入之后在exp
上合并匹配——这也会清理定义新变量时的ifelse
混乱。有什么建议吗
为清楚起见,以下是所需的输出:
> dt2
name exp id flag
1: jane doe 1.0 1 1
2: jane doe 30.0 NA NA
3: jane smith 2.0 4 1
4: john doe 1.5 3 1
在您的情况下,连接并不是真正的“模糊”。您所要做的就是通过
name
byexp
加入,同时允许每次比赛有一年的距离。这对于规格为-1L
的滚动连接非常有用
首先,我们将正确地为数据集设置关键帧
setkey(dt1, name, exp)
setkey(dt2, name, exp)
然后,我们将执行滚动联接,同时将-1L
作为其值传递
dt2[dt1, `:=`(id = i.id, flag = 1L), roll = -1L]
df2
# name exp id flag
# 1: jane doe 0.0 1 1
# 2: jane doe 30.0 NA NA
# 3: jane smith 2.0 4 1
# 4: john doe 1.5 3 1
将来,如果您需要执行区间连接,例如
c(1L,-1L)
,您可以查看foverlaps
函数的一些示例。您的问题不太清楚。是否要同时按名称
和exp
匹配?换句话说,df1
中的所有“jane doe”都是不同的人?无论如何,我不完全确定,但可能您正在寻找setkey(dt1,name,exp);设置键(dt2,名称,exp);dt2[dt1,id:=i.id,滚动=-1L]
?完美!从来都不太明白roll做了什么——终于找到了一个例子。所以roll=-2L
将匹配任何exp
最多少2个的人roll=1L
将匹配具有exp
最多1个的任何人,依此类推roll=+Inf
对于任何exp
较大者,code>roll=-Inf对于任何exp
较小者。1内匹配如何roll=c(-1L,1L)
不起作用,最近的也不一定起作用。对于间隔,您可能需要查看foverlaps
。。但是在滚动中有一些FRs
。FRs?未来的修订?
dt2[dt1, `:=`(id = i.id, flag = 1L), roll = -1L]
df2
# name exp id flag
# 1: jane doe 0.0 1 1
# 2: jane doe 30.0 NA NA
# 3: jane smith 2.0 4 1
# 4: john doe 1.5 3 1