R数据表推荐的处理日期时间的方法

时间:2015-10-11 10:37:15

标签: r datetime data.table

我有一个带有一列时间戳“2000-01-01 12:00:00.123456”的csv文件。在数据表中处理它的推荐方法是什么?我需要处理分组,匹配/滚动连接与另一个表中的IDate列,时间序列绘图等。

IDateTime("2000-01-01 12:00:00.123456")

Error in if (any(neg)) res[neg] = paste("-", res[neg], sep = "") :
missing value where TRUE/FALSE needed

我在可能的duplicate问题中看到了这个答案,其中Matthew建议手动将日期转换为整数。但那已经3岁了,我想知道现在是否有更好的方法?

2 个答案:

答案 0 :(得分:8)

IDateTime需要POSIXct类对象才能正常工作(它似乎也适用于factor转换,不确定原因)。我同意它没有很好地记录,并且可能值得在GH上打开关于文档的FR / PR - 但是有一个关于IDateTime vignette的开放队列。关于允许它与character类合作,已经有FR

IDateTime(as.POSIXct("2000-01-01 12:00:00.123456"))
#         idate    itime
# 1: 2000-01-01 12:00:00
## IDateTime(factor("2000-01-01 12:00:00.123456")) ## will also work

如果您想避免意外行为,请注意tz中的as.POSIXct参数

无论如何,错误实际上是由调用ITime的{​​{1}}的打印方法引起的,请参阅herehere 例如,如果您将运行format.ITime,那么不会会产生错误,但res <- IDateTime("2015-09-29 08:22:00")由于{{3}中的错误转换(我相信)将为res (格式仅为NA)。对我来说这似乎是一个错误,我仍然不确定"%H:%M:%OS"类在factor中没有factor方法时是如何正常工作的。可能是由于其methods(as.ITime)内部存储模式调用了另一种相关方法。

答案 1 :(得分:2)

根据时间字段所需的精确度,您可能需要使用POSIXct代替IDateTime
存储在源文件中的时间戳格式可以通过format(Sys.time(), "%Y-%m-%d %H:%M:%OS6")在R中再现 使用IDateTime时,您将丢失亚秒,您可以使用ITime来查看它是否符合您的需要。
如果您坚持POSIXct,那么您应该了解?setNumericRounding函数,这可能有时很重要,因为它会影响排序和加入POSIXct的基础数值数据类型。< / p>