1

我试图从chronR 中的时间中提取小时。帮助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 的部分吸引力在于拥有一组函数来处理各种日期时间数据,而不得不改变hourhours任何地方都违背了这一点。

4

1 回答 1

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)基于 chron 将一天表示为 1 的事实,不使用 lubridate 的替代方法如下,因此 1 小时是 1/24:

trunc(24 * as.numeric(tt))
## [1] 1
于 2015-12-08T13:16:53.497 回答