У меня есть два фрейма данных,
aa
имеет start
и stop
время событий - много в день
prbb
имеет время start
и stop
моего интереса к этим событиям - один start
и один stop
в день на событие.
Я хотел бы извлечь множество событий из aa
, которые попадают в промежуток времени этого дня для этого события из prbb
aa <- data.frame(aaletters = c(rep("a",7), rep("b", 3),rep("c", 1)),
aastart = as.POSIXct(c("2019-05-02 05:06:35","2019-05-02 12:06:35", "2019-05-03 08:15:52", "2019-05-03 09:15:52", "2019-05-06 05:51:37",
"2019-05-06 07:01:37","2019-05-06 09:51:37","2019-05-02 07:15:32", "2019-05-03 12:14:04", "2019-05-06 12:24:37",
"2019-05-02 03:15:32"
)),
aastop = as.POSIXct(c("2019-05-02 05:15:30", "2019-05-02 12:15:30", "2019-05-03 08:44:08","2019-05-03 09:44:08", "2019-05-06 06:51:37",
"2019-05-06 07:02:37","2019-05-06 10:02:37","2019-05-02 08:15:32", "2019-05-03 13:41:16", "2019-05-06 13:24:43",
"2019-05-02 03:35:32"
)))
prbb <- data.frame(prbbletters = c(rep("a", 3), rep("b", 3), rep("c",3)),
prstart = as.POSIXct(c("2019-05-02 06:06:35", "2019-05-03 06:15:52", "2019-05-06 07:51:37", "2019-05-02 06:15:32", "2019-05-03 08:14:04",
"2019-05-06 06:24:37","2019-05-02 06:14:19", "2019-05-03 06:41:35", "2019-05-06 06:17:50"
)),
prstop = as.POSIXct(c("2019-05-02 23:18:30", "2019-05-03 20:44:08", "2019-05-06 22:37:20", "2019-05-02 23:24:27", "2019-05-03 19:41:16",
"2019-05-06 23:24:43","2019-05-02 19:50:52", "2019-05-03 23:57:47", "2019-05-06 23:56:39"
)))
Я попробовал это, но это не сработало, оно игнорирует by=
setDT(aa)
setDT(prbb)
aa[inrange(aa$aastart, prbb$prstart, prbb$prstop, incbounds = FALSE) & inrange(aa$aastop, prbb$prstart, prbb$prstop, incbounds = FALSE), by = prbletters]
setDT(aa)
setkey(aa, aastart, aastop)
setDT(prbb)
setkey(prbb, prstart, prstop)
foverlaps(aa, prbb, nomatch = NULL, mult = "first")[ , by = prbbletters]
Я также пытался fuzzy_joins
, но я не могу правильно объединить группировку.
# expected result: 7 rows
# 1: a 2019-05-02 12:06:35 2019-05-02 12:15:30
# 2: a 2019-05-03 08:15:52 2019-05-03 08:44:08
# 3: a 2019-05-03 09:15:52 2019-05-03 09:44:08
# 4: a 2019-05-06 09:51:37 2019-05-06 10:02:37
# 5: b 2019-05-02 07:15:32 2019-05-02 08:15:32
# 6: b 2019-05-03 12:14:04 2019-05-03 13:41:16
# 7: b 2019-05-06 12:24:37 2019-05-06 13:24:43
Заранее спасибо!