【问题标题】:How to find the difference between two dates in hours in R?如何在R中找到两个日期之间的时间差?
【发布时间】:2012-10-10 05:38:00
【问题描述】:

冒着因提出“明显”问题而被修改的极端风险,我如何在 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

【问题讨论】:

  • 感谢您投反对票。解释如何执行此操作的文档可能很有用。我所看到的一切都指向strptime,它涉及字符串,并且字符串对日期的区域设置非常敏感。
  • ?ISOdate 告诉你阅读?DateTimeClasses,它告诉你“两个日期时间对象的减法等同于使用difftime。”在提出“明显”的问题之前,请阅读文档。

标签: r datetime


【解决方案1】:

使用函数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

我怎么知道去哪里看?

好吧,先看看你减去两次得到的对象的结构:

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

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

【讨论】:

  • 耶!谢谢!请注意,似乎需要添加“as.numeric”才能获得实际数字。
  • @HughPerkins 我认为您没有注意到对象的实际存储方式。做tmp &lt;- difftime(x[1], x[2], units="hours") 然后unclass(tmp) 注意它是一个长度为1 的数字向量。正是 print 方法和属性"units" 的使用赋予了它一种字符的味道。您无需将其转换为数字即可使用它,因为它已经是数字了; tmp + 1 例如。您提到的as.numeric() 只是清除了类和"units" 属性。
猜你喜欢
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
  • 2013-07-30
  • 1970-01-01
相关资源
最近更新 更多