【问题标题】:lubridate hour doesn't handle chron timeslubridate 小时不处理 chron 时间
【发布时间】:2016-03-12 10:30:53
【问题描述】:

我正在尝试从 R 中的 chron 时间中提取小时。lubridate::hour 的帮助说明如下:

日期时间必须是 POSIXct、POSIXlt、Date、Period、chron、yearmon、yearqtr、zoo、zooreg、timeDate、xts、its、ti、jul、timeSeries 和 fts 对象。

但它似乎不起作用:

library(chron)
library(lubridate)
hour(chron(times. = "01:02:03"))

给出错误

Error in as.POSIXlt.default(x, tz = tz(x)) : 
do not know how to convert 'x' to class “POSIXlt”

这是一个错误吗?

我知道可以改用chron::hours,这在大多数情况下更可取。但 lubridate 的部分吸引力在于拥有一组函数来处理各种日期时间数据,并且必须在任何地方将 hour 更改为 hours 与此背道而驰。

【问题讨论】:

    标签: r lubridate chron


    【解决方案1】:

    问题是下面tt

    library(chron)
    tt <- chron(times. = "01:02:03")
    class(tt)
    ## [1] "times"
    

    实际上不属于"chron" 类。它属于"times" 类。

    1) 它也需要一个日期部分才能属于"chron" 类,所以这可以工作:

    library(lubridate)
    hour(chron(0, tt))
    ## [1] 1
    

    2) 或:

    hour(as.chron(tt)) # as.chron always produces a chron object
    ## [1] 1
    

    3) 不使用 lubridate 的替代方法如下,基于 chron 将一天表示为 1,因此 1 小时是 1/24:

    trunc(24 * as.numeric(tt))
    ## [1] 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多