在R中将十进制数转换为小时,时间或差异时间

时间:2017-09-13 14:02:11

标签: r time lubridate

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

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

我想将其转换为日期或时间格式。我可以提出的解决方案涉及从数字中删除小数位并将它们转换为分钟,但这感觉有点“hacky”,例如。

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

当然有更好的方法吗?

3 个答案:

答案 0 :(得分:2)

试试这个:

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" 

答案 1 :(得分:1)

仅限于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"

答案 2 :(得分:0)

onlick="test()"

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

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