【发布时间】:2016-10-29 22:33:29
【问题描述】:
我有这种格式的数据
> data = data.table(id = 1:10, date = seq(as.Date("2016-01-01"), by = 1, length = 10))
> data
id date
1: 1 2016-01-01
2: 2 2016-01-02
3: 3 2016-01-03
4: 4 2016-01-04
5: 5 2016-01-05
6: 6 2016-01-06
7: 7 2016-01-07
8: 8 2016-01-08
9: 9 2016-01-09
10: 10 2016-01-10
我有另一个矩阵,它是我希望执行的查询/子集。
> query = data.table(id = c(1,4,7), date_start = c("2016-01-01", "2016-01-01", "2016-01-01"), date_end = c("2016-01-04", "2016-01-02", "2016-01-03"))
> query
id date_start date_end
1: 1 2016-01-01 2016-01-04
2: 4 2016-01-01 2016-01-02
3: 7 2016-01-01 2016-01-03
我希望做这样的事情:
subset(data, (id == query[1] & date > date_start[1] & date < date_end[1]) |
(id == query[2] & date > date_start[2] & date < date_end[2]) |
(id == query[3] & date > date_start[3] & date < date_end[3]))
是否有自动生成子集查询而不使用 for 循环和 rbinding 结果。
谢谢
【问题讨论】:
-
您可以在正确格式化数据后使用
foverlaps(data, query, nomatch=0)(使用IDate列,请参阅?foverlaps和?IDate)。此问答可能会有所帮助:stackoverflow.com/q/27487949 -
我认为 foverlaps 是我正在寻找的,如果您作为答案回复,我将能够接受。
标签: r data.table subset date-range