У меня есть набор данных из базы данных PostgreSQL
, в которой есть два столбца:
id
= идентификатор участника
time_stamp
= отметка времени записанного измерения
Мне нужно работать с dbplyr
, чтобы изменить новый столбец на основе последовательности time_stamp
. Другими словами, если time_stamp
происходит последовательно (то есть с интервалом одна минута), это распознается как одно событие.
Например, это мой набор данных:
library(dplyr)
library(dbplyr)
library(lubridate)
mf <- memdb_frame(
id = "id001",
time_stamp = c(
seq(from = as_datetime("2021-01-01 08:00:00"), to = as_datetime("2021-01-01 08:03:00"), by = "1 min"),
seq(from = as_datetime("2021-01-01 08:05:00"), to = as_datetime("2021-01-01 08:08:00"), by = "1 min"),
seq(from = as_datetime("2021-01-01 08:12:00"), to = as_datetime("2021-01-01 08:18:00"), by = "1 min")
)
)
mf %>%
collect() %>%
mutate(time_stamp = as_datetime(time_stamp))
#> # A tibble: 15 x 2
#> id time_stamp
#> <chr> <dttm>
#> 1 id001 2021-01-01 08:00:00
#> 2 id001 2021-01-01 08:01:00
#> 3 id001 2021-01-01 08:02:00
#> 4 id001 2021-01-01 08:03:00
#> 5 id001 2021-01-01 08:05:00
#> 6 id001 2021-01-01 08:06:00
#> 7 id001 2021-01-01 08:07:00
#> 8 id001 2021-01-01 08:08:00
#> 9 id001 2021-01-01 08:12:00
#> 10 id001 2021-01-01 08:13:00
#> 11 id001 2021-01-01 08:14:00
#> 12 id001 2021-01-01 08:15:00
#> 13 id001 2021-01-01 08:16:00
#> 14 id001 2021-01-01 08:17:00
#> 15 id001 2021-01-01 08:18:00
Теперь мне нужно распознать события. Это означает, что нужно найти time_stamps
, которые произошли в последовательности (последовательность = интервал в 1 минуту). Например, вот мой ожидаемый результат:
#> # A tibble: 15 x 3
#> id time_stamp events
#> <chr> <dttm> <chr>
#> 1 id001 2021-01-01 08:00:00 event_1
#> 2 id001 2021-01-01 08:01:00 event_1
#> 3 id001 2021-01-01 08:02:00 event_1
#> 4 id001 2021-01-01 08:03:00 event_1
#> 5 id001 2021-01-01 08:05:00 event_2
#> 6 id001 2021-01-01 08:06:00 event_2
#> 7 id001 2021-01-01 08:07:00 event_2
#> 8 id001 2021-01-01 08:08:00 event_2
#> 9 id001 2021-01-01 08:12:00 event_3
#> 10 id001 2021-01-01 08:13:00 event_3
#> 11 id001 2021-01-01 08:14:00 event_3
#> 12 id001 2021-01-01 08:15:00 event_3
#> 13 id001 2021-01-01 08:16:00 event_3
#> 14 id001 2021-01-01 08:17:00 event_3
#> 15 id001 2021-01-01 08:18:00 event_3
Обратите внимание, что от строки
4
до5
был интервал 2 минуты, что привело к запуску следующего события. То же самое от строки8
до9
: был интервал 4 минуты, а затем началось следующее событие.
PS: мне нужно, чтобы он полноценно работал в
dbplyr
, то есть: без использованияcollect()
Любые идеи будут очень признательны!
Благодарю вас!