我试图将一个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中将周期转换为另一种格式?好像我错过了一些简单的东西。
谢谢!
答案 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
非常仔细地区分Duration
,Interval
和Period
类。
答案 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"