Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-数据表滚动连接混淆_R_Data.table - Fatal编程技术网

R-数据表滚动连接混淆

R-数据表滚动连接混淆,r,data.table,R,Data.table,使用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: 170

使用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
我试过了

m[, EFDT.m := EFDT]
m[p, roll=-Inf, nomatch=0]

运气不好。

将新列添加到
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
p[,EFDT.copy:=EFDT]
p[m,roll=Inf]
#PolicyNo EFDT EFDT.copy
#1:  1709119 2011-03-01       
#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
中添加一些筛选和列重命名,您就可以全部设置了。

为什么您想要的结果有3行而不是2行(
p
中的行数)?
m
中的@eddi第3行和第4行应该与
p
中的第2行匹配,因为它们有匹配的策略号,并且它们的EFDT(在
m
中)向后滚动时最接近2013-02-01。简单的例子——假设你有一张营销活动表和一张产品销售表。在本例中,您希望根据销售发生的日期将每个产品销售与每个营销活动相匹配,并向后滚动到最近的营销活动。每个活动可以与多个销售挂钩。
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