r - 使用 R data.table 对高频时间序列进行子集化(用 data.table 替换 xts 功能)

标签 r data.table posixct

我想使用 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')]

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

我看过data.table帮助 IDateITime但我真的不知道如何把它们放在一起。它们是否更快、更容易以交互方式使用?

对于像这样的操作,这些是我不要求直接执行这些操作的示例......,给我每个月最后 2 个工作日的所有数据,所有工作日的时间。是像我上面做的那样是最有效的方法,还是有更好的方法来操作 R 中的数据表的时间序列?

最佳答案

Is doing it like I do above the most efficent way to do it or are there better ways to manipulate time series with data tables in R?



这些类型的子集(范围子集)最有效的方法是使用 between功能。不幸的是,它目前遭受 bug ,因此它并不比您使用的方法快。错误 has been fixed ,一旦合并的开发包将发布在我们的类 CRAN 存储库(包括二进制文件)中。使用 between 的另一个原因是它更有可能在 future 进行内部优化以提高速度/内存,因为仍有改进的空间。还有第三种方法可以获得预期的答案,使用非对等连接,但它是所有三种方法中最慢的。

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)]

I have looked at data.table help on IDate and ITime but I don't really know how to put it all together. Are they faster and easy to work with interactively?



它们可以更快,并且精确。 I前缀代表整数。引入它们的原因是 POSIXct 是一个数字,因此会遇到浮点算术问题。加入或分组浮点数可能会导致不同平台上的不同答案。整数类型更易于移植,可以针对排序或分组等操作进行优化。

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

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

关于r - 使用 R data.table 对高频时间序列进行子集化(用 data.table 替换 xts 功能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39554481/

相关文章:

r - GLM 逻辑回归的有效起始值错误

r - 在 Shiny 的 DT 数据表中更改数据集时保留选定的行

r - data.table - setkey(...) 是否创建索引或对数据表中的行进行物理重新排序?

r - 在 R 中时间重叠时划分行

r - R 中的 POSIXct 微秒不一致

r - 在 geom_text 中绘制近似相等的图

r - rCharts 中的 nPLot x 轴日期变量和默认堆叠条形图

R将多个数据表 append 到列表

r - 是否可以就地(破坏性地)修改data.frame?

r - 将 POSIXct 对象强制转换为 Date 对象