如何找到R中两个小时之间的差异?

Hug*_*ins 2 datetime r

由于被问到"明显"问题而被降低风险的极大风险,如何找到R中两个小时之间的差异?

> ISOdate(2004,1,6) - ISOdate(2004,1,1)
Time difference of 5 days
> as.POSIXlt(ISOdate(2004,1,6) - ISOdate(2004,1,1))
Error in as.POSIXlt.default(ISOdate(2004, 1, 6) - ISOdate(2004, 1, 1)) : 
  do not know how to convert 'ISOdate(2004, 1, 6) - ISOdate(2004, 1, 1)' to class "POSIXlt"
 > (ISOdate(2004,1,6) - ISOdate(2004,1,1))$year
Error in (ISOdate(2004, 1, 6) - ISOdate(2004, 1, 1))$year : 
  $ operator is invalid for atomic vectors
> (ISOdate(2004,1,6) - ISOdate(2004,1,1))$mon
Error in (ISOdate(2004, 1, 6) - ISOdate(2004, 1, 1))$mon : 
  $ operator is invalid for atomic vectors
Run Code Online (Sandbox Code Playgroud)

And*_*rie 13

使用difftime带有参数的函数units="hours":

x <- c(ISOdate(2004,1,6), ISOdate(2004,1,1))
difftime(x[1], x[2], units="hours")
Time difference of 120 hours
Run Code Online (Sandbox Code Playgroud)

我怎么知道在哪里看?

那么,首先查看减去两次时得到的对象的结构:

str(x[1] - x[2])
Class 'difftime'  atomic [1:1] 5
  ..- attr(*, "units")= chr "days"
Run Code Online (Sandbox Code Playgroud)

所以现在你知道你正在处理一类difftime.从这里可以很容易地找到帮助:见?difftime

  • @HughPerkins我想你并没有注意到对象是如何实际存储的.做`tmp < - difftime(x [1],x [2],units ="hours")``然后`unclass(tmp)`注意它是长度为1的数字向量.它是打印方法和属性"单位"的使用,赋予它一种角色的味道.您不需要将其转换为数字以使用它,因为它已经是数字; 例如`tmp + 1`.你提到的`as.numeric()`只是清除了类和`"units"属性. (3认同)