2

私は R で多数の大規模な時系列の通貨ペアの価格設定データを扱っています。ファイルのサイズは 100 ~ 300 MB になる傾向があり、通常は一度に 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 でのその週の最後の時間インデックスです。

データを取引週、インデックス、またはその他の方法で分割するための許容できる方法が見つかりませんでした。私の試みはすべてハングアップします。USDJPY ファイルには、最大 1,900,000 行が含まれています。

私が試した1つのアプローチ:

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

時間がかかりすぎます(完了する前に終了しました)

4

1 に答える 1

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)]
于 2015-05-08T03:39:34.063 に答える