2017-03-05 16 views
3

私はRでコーディングするのが新しく、自分自身が立ち往生しています。私のファイルは高頻度株価指数データで構成され、xtsファイルに変換されます。 (左カラムは、日付と時刻と右の列で日中リターンです)、以下を参照してください:サブセットxtsファイルを日付で

2007-01-02 09:00:00 0.000000e+00 

2007-01-02 09:01:00 2.670405e-05 

2007-01-02 09:02:00 1.387629e-03 

2007-01-02 09:03:00 -1.866841e-04 

2007-01-02 09:04:00 -3.201110e-04 

2007-01-03 09:00:00 0,0000000000 

2007-01-03 09:01:00 -1.321929e-04 

2007-01-03 09:02:00 -1.586546e-04 

2007-01-03 09:03:00 7.665975e-04 

2007-01-03 09:04:00 -5.284993e-05 

2007-01-03 09:05:00 -2.907246e-04 

私のデータは5年間で行くと私がしたいことは500日で、それをサブセットし、その後に30日間前方に移動されますループ。しかし、ループそのものは必要ではありませんが、この種の関数を構築する方法の助けを借りてください。

私は私のデータセットは、日中リターンの和である「DIRV」と命名されている次の関数、使用している:

b<-head(DIRV, n=500) 

L<-as.Date(index(b)[1]) 

J<-as.Date(index(b)[500]) 

V<-IRV["L/J"] 

をしかし、私は次のエラーを取得:また

Error in if (length(c(year, month, day, hour, min, sec)) == 6 && c(year, : missing value where TRUE/FALSE needed

を:警告メッセージ:

1: In as_numeric(YYYY) : NAs introduced by coercion 2: In as_numeric(YYYY) : NAs introduced by coercion

答えて

2

エラーが発生するのは、日付 - 時刻mesは文字列"L/J"であり、サブセット化操作には意味がありません。また、LまたはJNAを返さないように注意してください。これはデータの境界で発生する可能性があります。そうしないとエラーが発生します。

は、エラーを回避するために、代わりにこれを試してみてください:

if (is.na(L) || is.na(J)) stop("Not a valid date range.") 
V <-IRV[paste0(L,"/", J), ] 

あなたは慎重にあなたのウィンドウでエッジケースを処理します。

「私がしたいものを500日分サブセット化し、それをループで30日先に移動する」と言ったときには、あまり意味がありません。データのローリングウィンドウを計算することを意味する場合は、rollapplyr?rollapplyrを参照)を使用することができます。

+0

ありがとうFXQuantTraderの "paste0"機能は、私が探していたもので、スクリプトは正常に機能しています。私は、この場合ロールパッラーを稼働させることはできませんでした。なぜなら、私は日よりもむしろ分単位でロールバックする必要があります。また、日常のデータは定期的ではないため一定の日数の異なる観測量で構成されます。この機能は正確に機能します。 – Garten

関連する問題