【发布时间】:2021-06-14 03:33:22
【问题描述】:
我有一个 data.table 有几列日期, 和两列定义一个区间。 我想检查是否有任何日期在该间隔内。
这是一个只有三列日期的玩具示例。
DT <- data.table(d1=dmy(c("1-1-2019", "2-2-2019")),
d2=dmy(c("1-3-2019", "2-2-2022")),
d3=dmy(c("1-1-2020", "2-2-2021")),
initial=dmy(c("1-1-2020","5-5-2022")),
final=dmy(c("1-3-2020","1-1-2023")))
d1 d2 d3 initial final
2019-01-01 2019-03-01 2020-01-01 2020-01-01 2020-03-01
2019-02-02 2022-02-02 2021-02-02 2022-05-05 2023-01-01
我可以这样做:(它也可以用于过滤而不是创建新列)
DT[,new:=(d1 >= initial & d1 <= final) | (d2 >= initial & d2 <= final) |
(d3 >= initial & d3 <= final)]
但这很长,特别是如果我有超过三列。
我试过这个精简版
DT[,any( c(d1,d2,d3 ) %within% interval(initial, final))]
但它似乎不起作用。
我能做到的最简单的方法是什么?
也欢迎使用其他软件包的任何解决方案
【问题讨论】:
标签: r dplyr data.table lubridate