如何将小数转换为天,小时,分钟和秒?
小数点会显示分钟数,我想将其转换为字母“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日)。我需要以某种方式创造一个普遍的起源。
答案 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"