Используя lubridate
, мы можем сначала создать столбец end
, начав с time_begin
и добавив кумулятивную сумму interval
minutes
и используя эти значения, чтобы получить start
время.
library(lubridate)
library(dplyr)
dfr %>%
mutate(end = time_begin + minutes(cumsum(interval)),
start = c(time_begin, end[-n()]))
# interval end start
#1 30 2019-04-20 09:30:00 2019-04-20 09:00:00
#2 30 2019-04-20 10:00:00 2019-04-20 09:30:00
#3 60 2019-04-20 11:00:00 2019-04-20 10:00:00
#4 60 2019-04-20 12:00:00 2019-04-20 11:00:00
, где
time_begin <- as.POSIXct("09:00:00", format = "%T")
Выше есть сегодняшняя дата в выходных данных. Чтобы получить точно такой же вывод, как у вас, мы можем format
вывод
dfr %>%
mutate(end = time_begin + minutes(cumsum(interval)),
start = c(time_begin, end[-n()]),
start = format(start, "%T"),
end = format(end, "%T")) %>%
select(interval, start, end)
# interval start end
#1 30 09:00:00 09:30:00
#2 30 09:30:00 10:00:00
#3 60 10:00:00 11:00:00
#4 60 11:00:00 12:00:00