我的时间间隔以分钟为单位。
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的最佳方法是什么?
答案 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