yyyy年mm月dd日から○○個前のデータから取得したいという時

xtsパッケージを使っているとタイトルにあるように

  • yyyy年mm月dd日から○○個前のデータから取得したいという時

というのが結構ある。結構あるがいい書き方がわからない&一回書いてもよく忘れるのでここにメモしておく。いい書き方がまた見つかったら追加更新予定。

#とりあえずサンプルデータ&ライブラリのロード
library(xts)
data(sample_matrix)
sample.xts <- as.xts(sample_matrix)

#2007-06-17の4個前のデータから取得
index.start <- first(which(index(sample.xts) >= as.POSIXct("2007-06-17"))) - 4
index.end   <- nrow(sample.xts)

こんな感じでインデックスの開始・終了点を作っておいて、あとはデータをブチ抜けばいい。
as.POSIXctとなっている箇所は元のデータの日付が何型で入っているかに依存するので、そこは適宜変更しないといけない。

> head(sample.xts[index.start:index.end],10)
               Open     High      Low    Close
2007-06-13 47.46135 47.52004 47.43083 47.43083
2007-06-14 47.43279 47.43279 47.33490 47.34884
2007-06-15 47.33306 47.40490 47.26157 47.36779
2007-06-16 47.36452 47.40463 47.26056 47.26056
2007-06-17 47.24783 47.47249 47.24783 47.39521
2007-06-18 47.43470 47.56336 47.36424 47.36424
2007-06-19 47.46055 47.73353 47.46055 47.67220
2007-06-20 47.71126 47.81759 47.66843 47.66843
2007-06-21 47.71012 47.71012 47.61106 47.62921
2007-06-22 47.56849 47.59266 47.32549 47.32549

ちゃんと2007年6月17日から4つ前のデータが一番初めのデータになっている。