使用R data.table子集高频时间序列(用data.table替换xts功能)

5 r posixct data.table

我希望每天使用特定时间之间的所有数据data.table

这是进行这些子设置的最有效的方法(速度和内存)吗?

R.data.table <- data.table(Time = Sys.time() + 1:86400, runif(86400))

R.data.table[Time > as.POSIXct('2016-09-18 08:00:00') & Time < as.POSIXct('2016-09-18 09:00:00')]
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用xts,但是我喜欢使用data.table,因为我可以将这些子集的数据集用于预测模型,所以我不需要进行转换。

我一直在data.table寻找帮助IDateITime但我真的不知道如何将所有内容放在一起。他们更快,更轻松地进行交互工作吗?

对于类似这样的操作,我并没有要求直接使用这些示例...,请提供我每个月最后两个工作日(所有工作日小时数)的所有数据。是按照上面最有效的方式进行操作,还是有更好的方法来处理R中的数据表的时间序列?

jan*_*cki 2

像我上面那样做是最有效的方法吗?还是有更好的方法来使用 R 中的数据表来操作时间序列?

对于此类子集(范围子集)最有效的方法是使用between函数。不幸的是,它目前存在一个错误,因此它并不比您正在使用的方法快。该错误已修复,合并后的开发包将在我们的类似 CRAN 的存储库(包括二进制文件)中发布。使用的另一个原因between是,未来更有可能进行内部优化,从而提高速度/内存,因为仍有改进的空间。还有第三种方法可以获得预期的答案,即使用非等值连接,但它是这三种方法中最慢的。

library(data.table)
d = data.table(Time = as.POSIXct("2016-09-18 06:00:00") + 1:86400, runif(86400))
dn = as.POSIXct('2016-09-18 08:00:00')
up = as.POSIXct('2016-09-18 09:00:00')
d[Time > dn & Time < up]
d[between(Time, dn, up, incbounds=FALSE)]
d[.(dn=dn, up=up), on=.(Time>dn, Time<up)]
Run Code Online (Sandbox Code Playgroud)

我查看了 IDate 和 ITime 上的 data.table 帮助,但我真的不知道如何将它们放在一起。它们是否更快、更容易交互使用?

它们可以更快、更精确。前缀I代表整数。引入它们的原因是 POSIXct 是数字,因此存在浮点运算问题。浮点的连接或分组可能会导致不同平台上的不同答案。整数类型更便携,并且可以针对排序或分组等操作进行优化。


有一个待处理的更精确日期时间数据类型的功能请求:更快的内部日期/日期时间实现(具有 ns 分辨率..)https://github.com/Rdatatable/data.table/issues/1451


另外还有一个新小插图的路线图:timeseries - ordered Observations https://github.com/Rdatatable/data.table/issues/3453,您可能需要咨询该问题以了解 data.table 为有序数据集提供的更多功能,显然,它只是 xts 提供的一小部分,但通常是高度优化的。