Lubridate不能绕过Period对象

时间:2016-12-16 17:09:53

标签: r lubridate

我试图将一个Rubridate Period对象绕到最近的分钟。

library(lubridate)
round_date(as.period("2d 20H 22M 9.57S"))

给出

Error in as.POSIXct.numeric(x) : 'origin' must be supplied

所以round_date将我的句号转换为POSIXct,但为什么呢?是否有可能在rubridate中将周期转换为另一种格式?好像我错过了一些简单的东西。

谢谢!

3 个答案:

答案 0 :(得分:2)

自从打开此问题以来,现在可以像本thread所示对lubridate Period进行四舍五入。 这是您的情况下的示例:

library("lubridate")  
round(as.period("2d 20H 22M 9.57S"))  
[1] "2d 20H 22M 10S"

答案 1 :(得分:1)

根据?round_date,函数期望第一个参数是日期时间对象的向量。因此,它并不意味着用于周期对象。

可以在?as.period中找到解释为什么无法对周期对象进行舍入的原因:一个句点中每个时间单位的确切长度将取决于它何时发生。 [...]例如,当闰秒发生时,一分钟超过60秒。

lubridate非常仔细地区分DurationIntervalPeriod类。

答案 2 :(得分:1)

我绝对认为,最好的选择是将其转换为数字,即以秒为单位,将其除以60使其成为分钟,然后乘以60使其变为秒,将其四舍五入然后取整。然后您将获取最近的分钟。

seconds_to_period(round(as.numeric(as.period("2d 20H 22M 9.57S"))/60)*60)
[1] "2d 20H 22M 0S"

如果您想估算秒数,可以执行以下操作

seconds_to_period(round(as.numeric(as.period("2d 20H 22M 9.57S"))))
[1] "2d 20H 22M 10S"