在R中将十进制转换为天,分钟小时和秒

时间:2016-02-19 14:26:06

标签: r date datetime time

如何将小数转换为天,小时,分钟和秒?

小数点会显示分钟数,我想将其转换为字母“X days, Y hours, Z minutes and W seconds”,或显示“DD:HH:MM:SS

我发现一些类似的帖子,但没有一个在R中完成。

到目前为止,我的代码是:

seconds=55800
lengths=strftime(as.POSIXct(seconds, origin = Sys.Date(), tz = "UTZ"), format = "%d %H:%M:%S")

但我需要一个新的起源。由于55800秒是15.5小时,结果显示19天15小时30分钟,因为起源是基于今天的日期(19日)。我需要以某种方式创造一个普遍的起源。

3 个答案:

答案 0 :(得分:3)

lubridate包有各种各样的帮助程序,可以用于类似的用例。

> require(lubridate)
> seconds_to_period(55800)
[1] "15H 30M 0S"

答案 1 :(得分:1)

问题是输入是分钟数,但代码以秒开始。我假设了几分钟。

1)计算天数,然后将分钟转换为POSIXct并使用sprintf生成字符串。没有包使用。

# input
mins <- 55800 / 60

days <- mins %/% (24 * 60)
ct <- as.POSIXct(60 * mins, origin = "1970-01-01", tz = "UTC") # POSIXct
sprintf("%02d:%s", days, substring(ct, 12))

## [1] "00:15:30:00"

2)使用来自上方的chron和days稍微缩短一点,避免潜在的时区错误:

library(chron)
sprintf("%02d:%s", days, times(chron(mins / (24 * 60))))
## [1] "00:15:30:00"

更新:固定/简化。添加了(2)。

答案 2 :(得分:0)

# Original minutes vector
minutes <- 14.64416

# Get the number of whole minutes, save in `mins`
mins <- floor(minutes)

# Get the decimal from `minutes` and multiple by 60 to get
# the number of seconds within a the minute. Save in `secs`
secs <- round(minutes %% mins * 60, 0)

# Paste them together in whatever format you would like
paste0(mins, ":", secs)
[1] "14:39"