如何累积时间

时间:2019-04-20 12:13:42

标签: r dplyr lubridate

我的时间间隔以分钟为单位。

dfr <- data.frame(interval=c(rep("30",2),rep("60",2)),stringsAsFactors=F)

>> dfr
  interval
1       30
2       30
3       60
4       60

我有一个开始时间,例如09:00。

time_begin <- "09:00"

我想从time_begin开始,并累加时间间隔以获得以下结果:

  interval start   end
1       30 09:00 09:30
2       30 09:30 10:00
3       60 10:00 11:00
4       60 11:00 12:00

使用dplyr / lubridate的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

我们可以在没有任何外部软件包的情况下完成此操作

v1 <- with(dfr, format(strptime(time_begin, "%H:%M") + 
               c(0, cumsum(as.integer(interval) *60)), "%H:%M"))
transform(dfr, start = v1[-length(v1)], end = v1[-1])
#  interval start   end
#1       30 09:00 09:30
#2       30 09:30 10:00
#3       60 10:00 11:00
#4       60 11:00 12:00

答案 1 :(得分:2)

使用lubridate,我们首先可以创建end列,方法是从time_begin开始并添加interval minutes的累积总和,然后使用这些值获得{{ 1次。

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
相关问题