在 R 中将十进制数双精度转换为小时、时间或 difftime

Convert decimal number double to hour, time, or difftime in R

我有一个指定一天中的小时数的双精度向量,例如下面给出的示例。 6.50 将对应于 hh:mm 格式中的 06:30 等等。

ts <- c(6.50, 7.00, 7.25, 7.45, 8.00)

我想将其转换为日期或时间格式。我能想出的解决办法是把数字的小数点去掉,换算成分钟,但是感觉有点"hacky",比如

library(lubridate)
hm(paste(floor(ts), (ts - floor(ts)) * 60, sep = ':'))

肯定有更好的方法吗?

> lubridate::hm(ts)
[1] "6H 50M 0S" "7H 0M 0S"  "7H 25M 0S" "7H 45M 0S" "8H 0M 0S"

请求的替代方案(您的问题中已有内容):

> paste(floor(ts), round((ts-floor(ts))*60), sep=":")
[1] "6:30" "7:0"  "7:15" "7:27" "8:0"

试试这个:

library(chron)

times(ts / 24)
## [1] 06:30:00 07:00:00 07:15:00 07:27:00 08:00:00

这也行得通:

library(chron)
library(lubridate)

hms(times(ts/24))
## [1] "6H 30M 0S" "7H 0M 0S"  "7H 15M 0S" "7H 27M 0S" "8H 0M 0S" 

只坚持 lubridate

library(lubridate)
as.period(as.duration(days(x=1))*(ts/24))
# "6H 30M 0S" "7H 0M 0S"  "7H 15M 0S" "7H 27M 0S" "8H 0M 0S"