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