R中的高效分块时间序列

时间:2015-05-07 23:02:25

标签: r forex

我正在使用R中的一些大型时间序列货币对定价数据。文件大小通常为100-300MB,我一般会使用3个文件。我正在寻找一种(更有效)的方法来考虑这些数据的TIME列。

我的数据开始如下:

  PAIR    TIME                    BID    ASK
1 USD/JPY 2012-01-02 00:00:00.307 77.023 77.055
2 USD/JPY 2012-01-02 00:00:00.493 77.030 77.049
3 USD/JPY 2012-01-02 00:00:05.003 77.030 77.050
4 USD/JPY 2012-01-02 00:00:05.005 77.023 77.056
5 USD/JPY 2012-01-02 00:00:05.006 77.024 77.056
6 USD/JPY 2012-01-02 00:00:06.008 77.023 77.056
...       ...                     ...    ...

R理解TIME列没有问题。例如,

USDJPY$TIME[2] - USDJPY$TIME[1]

提供输出

Time difference of 0.1860001 secs

数据已按月组织成文件。不幸的是,这也太大了。我想按交易周'

分解定价数据

外汇交易连续多日延伸,通常是周一至周五。一些交易假期将暂停交易,这些天不会有数据。交易计划的性质是,如果

USDJPY$TIME[t+1] - USDJPY$TIME[t] 

...大于12小时,时间t是美元兑日元中该周的最后一次指数。

我还没有找到一种可接受的方法来将数据分成交易周,指数或其他方式。我的所有尝试都最终悬而未决。 USDJPY文件包含~1,900,000行。

我试过的一种方法:

for(i in 1:(length(USDJPY$TIME)-1)){
  USDJPY.diff <- c(USDJPY.diff, USDJPY$TIME[i+1]-USDJPY$TIME[i])
}

需要太长时间(我可以在完成之前退出)

1 个答案:

答案 0 :(得分:2)

我认为data.table应该在这里加快速度:

library(data.table) #1.9.5
setDT(data)
data[, DIFF := as.numeric(TIME-shift(TIME,n=1,type="lag"))]

周数计算(差异增量大于12小时)

data[, Week.num := cumsum(DIFF>12)]