Здравствуйте и Большое вам спасибо!
Я пытаюсь определить, какие интервалы перекрывают любые другие в группе.
Например, если у нас были следующие данные:
id <- rep(1:3, each=3)
hospitalization <- seq(ymd_hms("2017-11-28 00:00:01"), by = "day", length.out = length(id))
dat <- data.frame(id, hospitalization)
dat[3,2] <- dat[3,2] + dhours(12)
library(dplyr)
library(lubridate)
dat %>%
mutate(
discharge = hospitalization + dhours(35),
interval= hospitalization %--% discharge
) -> dat
dat
> dat
id hospitalization discharge interval
1 1 2017-11-28 00:00:01 2017-11-29 11:00:01 2017-11-28 00:00:01 UTC--2017-11-29 11:00:01 UTC
2 1 2017-11-29 00:00:01 2017-11-30 11:00:01 2017-11-29 00:00:01 UTC--2017-11-30 11:00:01 UTC
3 1 2017-11-30 12:00:01 2017-12-01 23:00:01 2017-11-30 12:00:01 UTC--2017-12-01 23:00:01 UTC
4 2 2017-12-01 00:00:01 2017-12-02 11:00:01 2017-12-01 00:00:01 UTC--2017-12-02 11:00:01 UTC
5 2 2017-12-02 00:00:01 2017-12-03 11:00:01 2017-12-02 00:00:01 UTC--2017-12-03 11:00:01 UTC
6 2 2017-12-03 00:00:01 2017-12-04 11:00:01 2017-12-03 00:00:01 UTC--2017-12-04 11:00:01 UTC
7 3 2017-12-04 00:00:01 2017-12-05 11:00:01 2017-12-04 00:00:01 UTC--2017-12-05 11:00:01 UTC
8 3 2017-12-05 00:00:01 2017-12-06 11:00:01 2017-12-05 00:00:01 UTC--2017-12-06 11:00:01 UTC
9 3 2017-12-06 00:00:01 2017-12-07 11:00:01 2017-12-06 00:00:01 UTC--2017-12-07 11:00:01 UTC
dat[1,4]
dat[2,4]
dat[3,4]
int_overlaps(dat[1,4],dat[2,4])
int_overlaps(dat[2,4],dat[3,4])
int_overlaps(dat[1,4],dat[3,4])
int_overlaps(dat[1,4],dat[3,4])
Я хотел бы вычислить столбец, который является логическим (overlap_any
), указывающим, перекрывает ли период какой-либо (не все, но хотя бы один) другой в той же группе.
При группировании по id для id==1
первый и второй периоды перекрываются, но не совпадают с третьим.Так что для этого идентификатора overlap_any
должно быть (True,True,False)
.
Я думал о чем-то вроде:
dat %>%
group_by(id) %>%
mutate(
overlap_any = some_function(interval)
)
Но я не знаю, что делать, потому что group_by
берет всеинтервалы для группы, а не текущей строки, которые я хотел бы оценить для перекрытия с остальными.Кроме того, int_overlaps
принимает только два аргумента.
Я ценю помощь!