将十进制小时数转换为持续时间并添加到另一列

Convert hours in decimal to duration and add to another column

我有一列是一天中的时间 (start_time),另一列是持续时间,以小时为单位,采用十进制格式 (duration_hours)。

我想将持续时间转换为 HH:MM,然后将其添加到开始时间以创建一个新变量 (end_time),即实验停止的时间。

  1. 如何将小数转换为HH:MM?我试过 as_duration 但它变成了秒

  2. 然后如何将该持续时间添加到开始时间以创建一天中的另一个时间?

谢谢!

library(tidyr)
library(hms)

data <- tribble(
  ~id, ~start_time, ~duration_hours,
  #--/---/---
  "a","6:30:00",6.47,
  "b", "17:05:30",5.30
)

data$start_time<-hms::as_hms(data$start_time)

reprex package (v2.0.1)

创建于 2022-05-16

hms只是秒数,所以你可以

transform(data, end_time=as_hms(as.POSIXct(paste(Sys.Date(), start_time)) + duration_hours*60^2))
#   id start_time duration_hours end_time
# 1  a   06:30:00           6.47 12:58:12
# 2  b   17:05:30           5.30 22:23:30

或使用strftime

transform(data, end_time=strftime(as.POSIXct(paste(Sys.Date(), start_time)) + duration_hours*60^2, "%T"))
#   id start_time duration_hours end_time
# 1  a    6:30:00           6.47 12:58:12
# 2  b   17:05:30           5.30 22:23:30

我们可以使用

library(lubridate)
hms::hms(seconds_to_period(data$duration_hours * 3600))