如何在列 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
我有两个 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