преобразование строк последовательные даты в столбце дата


Я должен повернуть наблюдений, которые удовлетворяют условие, двоичный флаг, на определенные даты в таблицу наблюдений с диапазоном дат, что они отвечают флаг.

Образец данных выглядит так:

id <- c(1001, 1001, 1001, 1002, 1002, 1002, 1003, 1003, 1003)date <- c("2016-06-20", "2016-06-21", "2016-06-22", "2016-06-20",           "2016-06-21", "2016-06-22", "2016-06-20", "2016-06-21",           "2016-06-22")flag <- c(1, 0, 0, 1, 1, 0, 1, 0, 1)mydata <- data.frame(id, date, flag)  id       date flag1001 2016-06-20    11001 2016-06-21    01001 2016-06-22    01002 2016-06-20    11002 2016-06-21    11002 2016-06-22    01003 2016-06-20    11003 2016-06-21    01003 2016-06-22    1

Я думаю это как два шага.

Step 1: determine whether the flag occurs on consecutive days.R, find, dates, consecutiveflag > 0

Это похоже на этот вопрос - но с условием, если . Я стараюсь, чтобы применить решение, хотя это не совсем работает таким же образом.

mydata$flag_consecutive <- mydata$flag > 0 & c(NA, diff(as.Date(mydata$date)) == 1)  id       date flag flag_consecutive1001 2016-06-20    1               NA1001 2016-06-21    0            FALSE1001 2016-06-22    0            FALSE1002 2016-06-20    1            FALSE1002 2016-06-21    1             TRUE1002 2016-06-22    0            FALSE1003 2016-06-20    1            FALSE1003 2016-06-21    0            FALSE1003 2016-06-22    1             TRUE
Step 2: create date range columnsdate_startdate_end

Я не уверен, как подойти к этой части с векторизации в р. Если флаг происходит только на один день, даты начала и окончания совпадают.Если флаг происходит по дней подряд, я хочу поставить первый день в последовательности, как и в прошлый день . Если нет флага происходит, напишите, что из набора данных.

Что я бы хотел, чтобы генерировать данные, отформатированные таким образом:

  id flag  date_start     date_end1001    1  2016-06-20   2016-06-201002    1  2016-06-20   2016-06-211003    1  2016-06-20   2016-06-201003    1  2016-06-22   2016-06-22

Если вы можете предоставить каких-либо указаний на Шаг 1 или Шаг 2, я очень благодарен. Я думаю в кругах и я не уверен, будет ли Шаг 1 очень даже нужны.