润滑时间不能处理时间

时间:2015-12-07 17:54:46

标签: r lubridate chron

我试图从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,这与此相反。

1 个答案:

答案 0 :(得分:2)

问题在于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