如何在列 Y 上连接两个 data.tables,同时对其他列 X 进行条件处理

How do you join two data.tables on column(s), Y, while conditioning on other column(s), X

我有两个 data.tables DT1 包含 {ID,LAB_DT,A1c} 并且 DT2 包含 {ID,LAB_DT}

DT1[ LAB_DT] 是 ID 的时间相关日期,DT2[ LAB_DT] 是 ID 的时间无关日期。

DT <- data.table::data.table(ID=c("a","a","b"),
                 LAB_DT=c("2002-01-02","2002-01-03","2002-01-01"),
                 A1c=c(8,6,6))
DT2 <- data.table::data.table(ID=c("a","a","b"),
                  LAB_DT=c("2002-01-01","2002-01-01","2002-01-01"))

DT[,LAB_DT:=lubridate::as_date(LAB_DT)] 
DT2[,LAB_DT:=lubridate::as_date(LAB_DT)]

理想情况下,我想连接这两个表,以便 DT 中 A1c <7 且其 DT[ LAB_DT] > 比 DT2[ LAB_DT] 的任何 ID 在连接后保留.

我知道加入 data.tables 看起来有点像:

DT1[DT2, on=.(ID,LAB_DT)], 

我不知道如何对 "on" 参数中未引用的列进行条件处理;但是,我尝试了以下方法,但发现这不是正确的方法:

DT1[DT2 & DT1$A1c <7 & (DT$LAB_DT > DT2$LAB_DT), on=.(ID,LAB_DT)] 

Error: operations are possible only for numeric, logical or complex types

最终结果应该是:

   ID     LAB_DT A1c
1:  a 2002-01-03   6

有没有人在使用 "on" 参数中的非引用列作为条件时成功连接了两个 data.tables?非常感谢您的帮助。

可能的解决方案:

DT[A1c < 7
   ][unique(DT2)
     , on = .(ID, LAB_DT > LAB_DT)
     , nomatch = 0
     , .(ID, LAB_DT = x.LAB_DT, A1c)]

给出:

   ID     LAB_DT A1c
1:  a 2002-01-03   6