数据表中使用毫秒级时间戳作为键值

5

在这个问题中讨论了在data.table中使用日期的问题。解决方法是使用内置的时间和日期类。它们可以精确到秒。是否有一种方法来处理索引列中的毫秒?


1
据我所读,常规的日期时间对象(精确到毫秒)可以存在于 data.table 对象中,只要您不将它们设置为键即可。如果您想以此为键,则需要使用 IDates 类。 - IRTFM
@DWin,我需要执行滚动合并,因此我需要将日期时间对象设为可索引。 - Ryogi
1
一如既往,一个好的问题包括完整的问题规范和一个样本数据集以供测试。 - IRTFM
2个回答

8

内置的日期和时间类,例如POSIXct在Windows上工作到毫秒级别,在Linux和OS X上工作到微秒级别。您可能还没有打开选项以打印子秒:

R> Sys.time()                            ## under default options
[1] "2011-10-25 17:40:05 CDT"
R> options("digits.secs"=7)              ## you may want this in ~/.Rprofile too
R> Sys.time()
[1] "2011-10-25 17:40:11.177271 CDT"     
R> 

4

是的,data.table要求键必须是整数或类似的类型(即POSIXct舍入到秒)。我建议通过将时间戳乘以1000作为您的键来解决此问题,并可能拥有一个单独的列,其中包含非舍入的POSIXct。或者,每当需要时,您可以在现场将其转换为POSIXct。


2
是的,例如 as.integer(1000*as.numeric(format(Sys.time(),"%H%M%OS3"))),这是一种解决方法。将日期和时间分成两列可以在滚动连接时非常有用:如果您想要同一天内但不是来自前一天的记录。 - Matt Dowle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接