R中的时差等级

时间:2014-08-27 17:23:20

标签: r datetime

最近我经常与R中的日期联系。但是,我总觉得我没有正确处理它们。通常我使用strptime将某个字符串格式转换为日期。最近我遇到了R中的as.Date。是否有任何一般规则应该使用?两者的差异/优点/缺点是什么?也许还有更好的课程?

我注意到的一件事是:as.Date约会我可以很容易地添加天数,即

> as.Date("10-05-2014",format="%d-%m-%Y") + 1
[1] "2014-05-11"

只需添加一天,而

> strptime("10-05-2014",format="%d-%m-%Y") + 1
[1] "2014-05-10 00:00:01 CEST"

默认添加秒数。也许一个人也可以轻松添加一天?

感谢您的见解

2 个答案:

答案 0 :(得分:3)

快速摘要:

  • Date个对象在内部存储为从零日期开始的整数天数(通常为1970-01-01)
  • POSIXt个对象(POSIXctPOSIXlt,后者是strptime创建的)做类似的事情,但会在几秒钟内存储(非常粗略地说)

这就是为什么在Date个对象中添加1个增量为1天,但在POSIXt个对象中添加1个增量为1秒。

特别是

POSIXlt个对象是特殊的,因为与POSIXct对象不同,您可以添加其他时间元素:

ltDate <-  strptime("10-05-2014",format="%d-%m-%Y")  # produces POSIXlt object
ltDate$mday <- ltDate$mday + 1                       
ltDate
# [1] "2014-05-11"
unlist(ltDate)          # POSIXlt objects are stored as lists of date elements
#  sec   min  hour  mday   mon  year  wday  yday isdst 
#    0     0     0    11     4   114     6   129     1 

另外,请参阅此 blog entry 了解详情。

总结:

  • 如果您不关心时间,请使用Date个对象
  • 如果要进行日期算术,请使用POSIXlt个对象
  • 使用POSIXct对象,如果你关心时间,但不需要做复杂的日期算术(即你只需要添加秒,小时 - 3600秒,天 - 24 * 3600秒等等)。

另外,正如Richard指出的那样,程序包lubridate提供了一些工具来执行一些更复杂的日期操作,这些操作通常与POSIXlt对象POSIXct对象进行。由于POSIXct对象更简单,更小,因此最好使用它们。

答案 1 :(得分:1)

尝试:

time1 <- strptime("10-05-2014",format="%d-%m-%Y")
time1$mday <- time1$mday+1
time1
#[1] "2014-05-11 EDT"
 class(time1)
#[1] "POSIXlt" "POSIXt" 

 class(as.Date("10-05-2014",format="%d-%m-%Y") + 1)
#[1] "Date"