У меня есть следующий набор данных (в действительности более 30 000 строк):
dt <- tibble::tibble(x=seq.Date(as.Date("2019-01-01"), as.Date("2019-01-10"), "days"), y=c(1,2,3,2,1,1,3,1,2,1))
A tibble: 10 x 2
x y
<date> <dbl>
1 2019-01-01 1
2 2019-01-02 2
3 2019-01-03 3
4 2019-01-04 2
5 2019-01-05 1
6 2019-01-06 1
7 2019-01-07 3
8 2019-01-08 1
9 2019-01-09 2
10 2019-01-10 1
Я бы хотел определить диапазоны дат выше заданного порогового значения, например, y> = 2. Первая дата появления диапазона должна быть сохранена в отдельном столбце как «начало», а последняя дата появления как « конец". Каждая комбинация «начало» / «конец» должна быть сохранена в отдельной строке. Диапазоны отделены друг от друга значениями y, которые ниже порогового значения (например, y <2). Результат должен выглядеть следующим образом: </p>
result <- tibble::tibble(start=as.Date(c("2019-01-02", "2019-01-07", "2019-01-09")), end=as.Date(c("2019-01-04", "2019-01-07", "2019-01-09")))
A tibble: 3 x 2
start end
<date> <date>
1 2019-01-02 2019-01-04
2 2019-01-07 2019-01-07
3 2019-01-09 2019-01-09
Мое текущее решение использует циклы for. Однако это приводит к очень медленному выполнению.
Есть идеи, как улучшить производительность и решить эту проблему более элегантно?
Спасибо за ваши идеи заранее.