在一天的时间上加分钟(hh:mm),如果时间> 24,则从新的一天开始。

问题描述 投票:0回答:1

我有一个时间变量为hh:mm。我想在其中添加数字分钟。如果时间超过24:00,就应该算作新的一天。

例如:时间从23:45开始,延迟20分钟,真正的开始时间是00:05。示例数据帧。

df <- data.frame(time_start = c("23:45", "23:30", NA, "23:00", "00:30", "02:00"),
                 delay = c(20, 300, 10, 120, 5, 0)) # in minutes

这是我把分钟转换成时间格式的方法:

library(chron)
library(lubridate)
df$delay<- hms(times(df$delay/24))

但是在time_start中加入延迟,结果是时间> 24小时。如何从新的一天开始?先谢谢你

r lubridate chron
1个回答
2
投票

你可以添加一个 "中性 "日期(例如 "1970-01-01")到你的时间和格式 as.POSIXct. 然后再加上延时(以秒为单位,因此 * 60). 最后要只显示时间,使用 format.

df <- transform(df, time_start2=as.POSIXct(
  ifelse(is.na(time_start), NA, paste(as.Date("1970-01-01"), time_start))
))

df$time_end <- format(with(df, time_start2 + delay * 60), "%H:%M")
df
# time_start delay         time_start2 time_end
# 1      23:45    20 1970-01-01 23:45:00    00:05
# 2      23:30   300 1970-01-01 23:30:00    04:30
# 3       <NA>    10                <NA>     <NA>
# 4      23:00   120 1970-01-01 23:00:00    01:00
# 5      00:30     5 1970-01-01 00:30:00    00:35
# 6      02:00     0 1970-01-01 02:00:00    02:00
© www.soinside.com 2019 - 2024. All rights reserved.