R - data.table 滚动连接混乱

3

我希望你能帮我翻译一下使用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中的EFDTs是“正确”的EFDTs(即我想保留的日期)。 我想根据匹配的政策号将m与p连接起来,并将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]

没有运气。

为什么您期望的结果有3行而不是2行(即“p”中的行数)? - eddi
@mengmeng,m中的第3行和第4行应该与p中的第2行匹配,因为它们具有相同的保单号,并且它们的EFDT(在m中)在向后滚动时最接近2013-02-01。简单的例子-假设您有一个营销活动表和一个产品销售表。在这种情况下,您需要根据销售发生的日期将每个产品销售与最近的营销活动匹配。每个活动可以与多个销售相关联。 - Ben
1个回答

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值和重命名列的操作,你就可以完成了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接