我正在尝试将数字转换为时间格式。 例如: 我计算在11 kWh充电站为电动汽车充电需要多长时间。
如何在R?
中将0,257 h
转换为00:15:25
答案 0 :(得分:6)
基于这个例子,我们假设输入小于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)。
答案 1 :(得分:3)
@GGrothendieck的答案似乎是去这里的方式。但是如果必须在基础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"
答案 2 :(得分:3)
tidyverse解决方案将使用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"