【问题标题】:Hours:Minutes:Seconds to Seconds时:分:秒到秒
【发布时间】:2017-09-07 19:23:13
【问题描述】:

我正在尝试将一列中的一长串值从 Hours:Minutes:Seconds 转换为秒。只要值是 H:M:S 格式,我下面的代码就可以正常工作,但是我在随机行中有值,这些值只是 M:S 格式(所以没有小时)。当我尝试对它们执行以下代码时,我显然为每个这些值获得了一个 NA。有没有办法只搜索 M:S 格式的值,只搜索 H:M:S 格式的值,然后分别转换它们?我是否需要在每个 M:S 值中添加一个小时值,以便我可以一次转换所有值?我的代码如下:

as.numeric(strptime(df$x, format="%H:%M:%S") - as.POSIXct(format(Sys.Date())), units="secs")

Example of data:
    Time
    12:22:05
    42:44

Example of data after running above:
    Time
    44525
    NA

【问题讨论】:

    标签: r datetime-conversion


    【解决方案1】:

    在使用lubridate 包时尝试parse_date_time

    df$time <- parse_date_time(x = df$time, c("HMS","MS"))
    

    【讨论】:

    • 仅供参考,目标是自午夜以来的秒数(显然感谢 OP 刚才的编辑)。
    • 谢谢,我相信这应该可行。一旦我运行它就会接受答案!我实际上只是在寻找 H:M:S 到 S 的转换,而不仅仅是午夜后的几秒钟。我有几个值超过 24 小时,所以想想我之前使用的方法,这些值不会很好。
    • lubridate 有一个函数period_to_seconds,它需要时间并返回它所代表的一天中的秒数。我有点困惑为什么你的时间值超过24...它们不是时间而是持续时间?
    【解决方案2】:

    您向 M:S 格式添加小时值的建议似乎也很容易实现:

    x = c("12:22:05", "42:44")
    x[nchar(x)<8] <- paste0("00:", x[nchar(x)<8])
    as.numeric(strptime(x, format="%H:%M:%S") - as.POSIXct(format(Sys.Date())), units="secs")
    ## 44525  2564
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 2012-02-12
      相关资源
      最近更新 更多