我在使用data.table实现滚动连接时遇到了一些麻烦。
我有两张桌子
m<-data.table(PolicyNo=rep(1709119, 4), EFDT=as.Date(c("2013-02-01","2014-02-01", "2012-3-1", "2011-3-1")))
setkey(m,"PolicyNo","EFDT")
m
PolicyNo EFDT
1: 1709119 2011-03-01
2: 1709119 2012-03-01
3: 1709119 2013-02-01
4: 1709119 2014-02-01
p<-data.table(PolicyNo=rep(1709119, 2), EFDT=as.Date(c("2013-02-01", "2012-1-1")))
setkey(p,"PolicyNo","EFDT")
p
PolicyNo EFDT
1: 1709119 2012-01-01
2: 1709119 2013-02-01
p中的EFDT是“正确的”EFDT(即我想保留的日期)。我想基于匹配的策略编号加入m,并将m中的EFDT向后滚动到p中的第一个匹配的EFDT。在此示例中,结果应为
result
PolicyNo EFDT EFDT.m
1: 1709119 2012-01-01 2012-03-01
2: 1709119 2013-02-01 2013-02-01
3: 1709119 2013-02-01 2014-02-01
我试过
m[, EFDT.m := EFDT]
m[p, roll=-Inf, nomatch=0]
没有运气。
答案 0 :(得分:2)
将新列添加到p
而不是m
,因为您需要相反的联接:
p[, EFDT.copy := EFDT]
p[m, roll = Inf]
# PolicyNo EFDT EFDT.copy
#1: 1709119 2011-03-01 <NA>
#2: 1709119 2012-03-01 2012-01-01
#3: 1709119 2013-02-01 2013-02-01
#4: 1709119 2014-02-01 2013-02-01
在NA
中添加一些过滤并重命名列,您将全部设置完毕。