当小间隔位于错误的表中时,如何应用foverlaps

当小间隔位于错误的表中时,如何应用foverlaps,r,join,data.table,overlap,R,Join,Data.table,Overlap,我正在尝试使用foverlaps应用一个合并,作为在不同子集上运行滚动回归的设置的一部分 设置 设置如下: DT1包括两个唯一标识符(gvkey、iid)、集合投资组合再平衡日期(RDt)和一组基于先前计算/排名的子集虚拟变量 DT2包括每个gvkey和iid组合的每日股票回报的完整列表 DT1 <- data.table(gvkey = rep(LETTERS[1:20],20), RDt = rep(ymd("1998-06-30&quo

我正在尝试使用foverlaps应用一个合并,作为在不同子集上运行滚动回归的设置的一部分

设置 设置如下: DT1包括两个唯一标识符(gvkey、iid)、集合投资组合再平衡日期(RDt)和一组基于先前计算/排名的子集虚拟变量

DT2包括每个gvkey和iid组合的每日股票回报的完整列表

DT1 <- data.table(gvkey = rep(LETTERS[1:20],20), 
                  RDt = rep(ymd("1998-06-30") + years(0:19),each=20), 
                  indicator_1 = sample(0:1,400,replace = TRUE), 
                  indicator_k = sample(0:1,400,replace = TRUE))
DT2 <- data.table(gvkey = rep(LETTERS[1:20],20,length.out=7275),
                  datadate = seq(ymd("1998-01-30"), ymd("2017-12-30"), by="days"), 
                  log_ret = rlnorm(7275))
#Note for laziness I have left weekends in and have excluded second identifier (iid) 

合并表(DT3)的子集:

结果与以下输出类似:

DT3 <- data.table(gvkey = rep("A",181), "datadate" = seq(ymd("1998-01-01"), ymd("1998-06-30"), by="days"), log_ret = rlnorm(181),indicator_1=1, indicator_k=0 )

DT3我们将无法复制您的随机数据,请使用
set.seed(42)
(或其他数字)开始您的代码。尝试将
datadate
复制到另一个字段(文字副本),并将其用作“范围”(恰好是零宽度)。然后,您可以在适当的位置为
foverlaps
使用较小的值。我们将无法复制您的随机数据,请使用
set.seed(42)
(或其他数字)开始您的代码。尝试将
datadate
复制到另一个字段(文字副本),并将其用作“范围”(恰好是零宽度). 然后,您可以在适当的位置为
foverlaps
使用较小的值。
DT3[gvkey=="A" & between(datadate,"1998-01-01", "1998-06-30")]
DT3 <- data.table(gvkey = rep("A",181), "datadate" = seq(ymd("1998-01-01"), ymd("1998-06-30"), by="days"), log_ret = rlnorm(181),indicator_1=1, indicator_k=0 )
#(only pre-event window is included here)
DT1[, ":=" ('reg_pre_start' = Last.Day(RDt - month(6)),
            'reg_pre_end' = Last.Day(RDt - month(1)),
            'RDt_Dummy' = RDt)]
DT2[, 'Datadate_Dummy' := datadate] #Daily dates

setkey(DT1, gvkey, iid, reg_pre_start, reg_pre_end) #6 month interval
setkey(DT2, gvkey, iid, datadate, Datadate_Dummy) #Zero day interval


DT3 <- foverlaps(DT1, DT2, type='within', nomatch=0L)
DT3 <- DT1[DT2, on = c("gvkey", "iid", "reg_pre_start<=datadate", "reg_pre_end>=datadate"), .SD, by = .EACHI, nomatch = 0, allow.cartesian = TRUE]