gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:08:48 24 4
gpt4 key购买 nike

我想使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com