我正在尝试将一个数字转换成时间格式。例如:我计算一辆电动汽车在11 kWh的充电站要充电多长时间。
如何在R中将0,257 h转换为00:15:25?
发布于 2018-01-17 13:18:10
根据这个例子,我们将假设输入小于24 (但是如果不是这样的话,可以根据这种输入应该产生的内容的定义来修改这些输入以处理这些输入)。
1) chron::times像这样使用chron times。times以一天的分数来度量时间,因此将小时(.257)除以24,得到它所代表的一天的分数。
library(chron)
times(.257 / 24)
## [1] 00:15:25这给出了一个chron "times"类对象。如果x是这样一个对象,请使用format(x)将其转换为字符串(如果需要)。
2) POSIXct --它不使用包,尽管它更长。它以字符串的形式返回时间。POSIXct以秒为单位度量时间,因此将小时(.257)乘以3600,因为一小时内有3600秒。
format(as.POSIXct("1970-01-01") + 3600 * .257, "%H:%M:%S")
## [1] "00:15:25"2a)这种变异也会起作用。这是较长的,但不涉及转换因素。它返回一个字符串。
format(as.POSIXct("1970-01-01") + as.difftime(.257, units = "hours"), "%H:%M:%S")
## [1] "00:15:25"更新:添加(2)。还增加(2a)和改进(2)。
发布于 2018-01-17 13:21:39
格罗德迪克的回答似乎就是这样的。但是,如果必须在基数R中这样做,则只需计算小时、分钟和第二个组件,并手动构建时间字符串:
x <- 2.257 # number of hours
total <- round(x*60*60, digits=0) # the total number of seconds
hours <- trunc(total / (60*60))
minutes <- trunc((x - hours) * 60)
seconds <- total %% 60
ts <- paste0(formatC(hours, width=2, flag="0"), ":",
formatC(minutes, width=2, flag="0"), ":",
formatC(seconds, width=2, flag="0"))
ts
[1] "02:15:25"
演示
发布于 2018-01-17 15:19:55
潮间带解决方案将使用hms包:
hms::hms(0.257 * 60^2)
#> 00:15:25.2提供类hms和difftime的对象。如果你想要一个字符串:
format(hms::hms(0.257 * 60^2))
#> [1] "00:15:25.2"https://stackoverflow.com/questions/48301870
复制相似问题