将十进制小时数转换为持续时间并添加到另一列
Convert hours in decimal to duration and add to another column
我有一列是一天中的时间 (start_time),另一列是持续时间,以小时为单位,采用十进制格式 (duration_hours)。
我想将持续时间转换为 HH:MM,然后将其添加到开始时间以创建一个新变量 (end_time),即实验停止的时间。
如何将小数转换为HH:MM?我试过 as_duration 但它变成了秒
然后如何将该持续时间添加到开始时间以创建一天中的另一个时间?
谢谢!
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))
我有一列是一天中的时间 (start_time),另一列是持续时间,以小时为单位,采用十进制格式 (duration_hours)。
我想将持续时间转换为 HH:MM,然后将其添加到开始时间以创建一个新变量 (end_time),即实验停止的时间。
如何将小数转换为HH:MM?我试过 as_duration 但它变成了秒
然后如何将该持续时间添加到开始时间以创建一天中的另一个时间?
谢谢!
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-16hms
只是秒数,所以你可以
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))