划分两个difftime对象

时间:2016-10-24 21:00:23

标签: r datetime

我有三次(Voucher)个对象POSIXctt1t2,用于指定完成任务的持续时间。

我通过执行以下操作找到了t3t1t2

t3

我想找到比率t1 <- as.POSIXct("2016-10-30 13:53:34") - as.POSIXct("2016-10-30 13:35:34") t2 <- as.POSIXct("2016-10-30 14:53:34") - as.POSIXct("2016-10-30 14:35:34") t3 <- as.POSIXct("2016-10-30 15:50:34") - as.POSIXct("2016-10-30 15:40:34") t1/t3。但是,我收到以下错误:

t2/t3

我知道有两个t1/t3 # Error in `/.difftime`(t1, t3) : # second argument of / cannot be a "difftime" object 个对象无法分割。有什么方法可以找到划分两个difftime个对象的结果吗?

3 个答案:

答案 0 :(得分:7)

要除以difftime,您必须将其转换为数字。如果您在评论中说明,您希望以秒为单位表达答案,则可以指定'secs'单位。例如:

t1/as.double(t3, units='secs')

正如@JonathanLisic所指出的,as.double通常不会使用units参数,这对于通用时间类不起作用。 S3的{​​{1}}方法采用参数。

答案 1 :(得分:2)

@ MatthewLundberg的答案更为正确,但我会建议另一种方法来帮助说明R中基于时间的对象的基本结构总是只是数字:

unclass(t1)/unclass(t3)
# [1] 1.8
# attr(,"units")
# [1] "mins"

请注意,就单位而言,t1/as.double(t3, units = 'secs')的方法没有多大意义,因为输出的单位是min / sec,而这个答案是无单位的。

进一步注意,这种方法有点危险,因为默认情况下,-.POSIXt(最后在定义t1t2t3时调用<) em>自动选择输出的单位(在核心,-.POSIXt此处将使用默认difftime调用units = "auto"。在这种情况下,我们(也许)很幸运,所有3个都是给定的单位,但考虑t4

t4 = as.POSIXct('2017-10-21 12:00:35') - as.POSIXct('2017-10-21 12:00:00')
t4
# Time difference of 35 secs

同样,如果我们以比率使用t4,我们可能会得到错误的单位。

我们可以通过明确调用difftime并预先声明单位来避免这种情况:

t1 = difftime("2016-10-30 13:53:34", "2016-10-30 13:35:34", units = 'mins')
t2 = difftime("2016-10-30 14:53:34", "2016-10-30 14:35:34", units = 'mins')
t3 = difftime("2016-10-30 15:50:34", "2016-10-30 15:40:34", units = 'mins')
t4 = difftime('2017-10-21 12:00:35', '2017-10-21 12:00:00', units = 'mins')
t4
# Time difference of 0.5833333 mins

答案 2 :(得分:2)

截至今天(9/2018),您可以使用as.numeric()difftime的值转换为数字值。即,如果您要服用

as.numeric(t3)

R将根据需要返回10。