最近我经常与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"
默认添加秒数。也许一个人也可以轻松添加一天?
感谢您的见解
答案 0 :(得分:3)
快速摘要:
Date
个对象在内部存储为从零日期开始的整数天数(通常为1970-01-01)POSIXt
个对象(POSIXct
或POSIXlt
,后者是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"