我有三次(Voucher
)个对象POSIXct
,t1
,t2
,用于指定完成任务的持续时间。
我通过执行以下操作找到了t3
,t1
,t2
:
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
个对象的结果吗?
答案 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
(最后在定义t1
,t2
和t3
时调用<) 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。