【问题标题】:Converting a number into time (0,5 of an hour = 00:30:00)将数字转换为时间(一小时的 0,5 = 00:30:00)
【发布时间】:2018-06-26 09:05:45
【问题描述】:

我正在尝试将数字转换为时间格式。 例如: 我计算了电动汽车在 11 kWh 的充电站需要充电多长时间。

  • 能源需求 - 2,8 kWh
  • 充电时间 = 2,8 kWh/11 kWh = 0,257 h
  • 0,257 小时 = 15 分 25 秒。 = 00:15:25

如何在 R 中将 0,257 h 转换为 00:15:25

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 这就是我所做的:aenergy demand= median*25/100, 充电时间 = energy demand/11) 25 - 能量消耗 - 25kWh/100km 中位数 = 11.306km(距离) 在这里我收到了一个包含以下值的表格: 时间间隔 - 00:00 - 00:30 能源需求 - 2.827 kWh 充电时间 - 0,257 h 我知道有一些功能它可以将数字转换为时间序列,例如 POSIXlt 和包“chron”。但是我无法理解必须建立的条件你能帮我写代码吗?非常感谢!

标签: r time


【解决方案1】:

根据示例,我们将假设输入小于 24(但如果不是这种情况,则可以根据此类输入应产生的定义进行修改以处理该问题)。

1) chron::times 像这样使用 chron timestimes 以一天中的分数来衡量时间,因此将小时 (.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)。

【讨论】:

    【解决方案2】:

    @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"
    

    Demo

    【讨论】:

    • 非常感谢!我也试试你的方法。
    【解决方案3】:

    tidyverse 解决方案将使用 hms 包:


    hms::hms(0.257 * 60^2)  
    #> 00:15:25.2
    

    为您提供 hmsdifftime 类的对象。如果你想要一个字符串:


    format(hms::hms(0.257 * 60^2))
    #> [1] "00:15:25.2"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-08
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 2010-09-25
      相关资源
      最近更新 更多