Я хочу преобразовать временные коды, подобные этим
library(lubridate)
library(tidyverse)
df_time <- tibble(time = c(ymd_hms("2020_01_01 00:00:01"),
ymd_hms("2020_01_01 00:00:02"),
ymd_hms("2020_01_01 00:00:03"),
ymd_hms("2020_01_01 00:00:04"),
ymd_hms("2020_01_01 00:00:05"),
ymd_hms("2020_01_01 00:00:06"),
ymd_hms("2020_01_01 00:00:07"),
ymd_hms("2020_01_01 00:00:08"),
ymd_hms("2020_01_01 00:00:09"),
ymd_hms("2020_01_01 00:00:10")),
a = c(0, 1, 1, 1, 1, 0, 0, 1, 1, 0),
b = c(0, 0, 1, 1, 0, 1, 1, 1, 0, 0))
, что приведет к
> df_time
# A tibble: 10 x 3
time a b
<dttm> <dbl> <dbl>
1 2020-01-01 00:00:01 0 0
2 2020-01-01 00:00:02 1 0
3 2020-01-01 00:00:03 1 1
4 2020-01-01 00:00:04 1 1
5 2020-01-01 00:00:05 1 0
6 2020-01-01 00:00:06 0 1
7 2020-01-01 00:00:07 0 1
8 2020-01-01 00:00:08 1 1
9 2020-01-01 00:00:09 1 0
10 2020-01-01 00:00:10 0 0
в коды поворота (также известные как коды событий / «данные начала и остановки»). Должен выглядеть следующим образом df:
df_turn <- tibble(start = c(ymd_hms("2020_01_01 00:00:02"),
ymd_hms("2020_01_01 00:00:03"),
ymd_hms("2020_01_01 00:00:06"),
ymd_hms("2020_01_01 00:00:08")),
end = c(ymd_hms("2020_01_01 00:00:05"),
ymd_hms("2020_01_01 00:00:04"),
ymd_hms("2020_01_01 00:00:08"),
ymd_hms("2020_01_01 00:00:09")),
code = c("a", "b", "b", "a"))
> df_turn
# A tibble: 4 x 3
start end code
<dttm> <dttm> <chr>
1 2020-01-01 00:00:02 2020-01-01 00:00:05 a
2 2020-01-01 00:00:03 2020-01-01 00:00:04 b
3 2020-01-01 00:00:06 2020-01-01 00:00:08 b
4 2020-01-01 00:00:08 2020-01-01 00:00:09 a
Этот замечательный пост как преобразовать временные коды в коды поворота предлагает решение для одного события на код, но не более одного.
Спасибо!