xtsライブラリを使ってみる−2

その1はこちら「xtsライブラリを使ってみるー1

マニュアルを読み込んで大体(私が)使いそうな関数をその1の記事と合わせて以下のサンプルで網羅した感じ。
特にlag関数の挙動が大事。

library(xts)
#前回同様、サンプル行列で試す
data(sample_matrix)
sample.xts <- as.xts(sample_matrix)

#lag関数を使えば日付を1日ずらすことができる。
lag(sample.xts)
#例えばリターンを計算したいなら以下のようにすればOK
sample.xts/lag(sample.xts)-1

#↓記事1では以下のように月末時のデータを抜いたが、もうちょっと汎用的な関数があった
#index.monthlast <- endpoints(sample.xts)
#sample.xts[index.monthlast]
#月末だけのデータを取得。
#ここで注意したいのがOLHC(Open,Low,High,Close)データだと、月単位でOHLCを計算してくれること
to.monthly(sample.xts)
#週次も同様で週ごとでOLHCしてくれる
to.weekly(sample.xts)
to.period(sample.xts,period="weeks")

#日付型を作る関数firstof lastof.
#2000年初日を作成
firstof(2000)
#2007年10月末を作成
lastof(2007,10)

#データの日時のみを抽出するにはindex関数を使う.この状態で日次の変更もできる
index(sample.xts)
index(sample.xts)[1] <- as.POSIXct("2010-01-01 11:11:11")
head(sample.xts)
#日時の型を調べる
indexClass(sample.xts)

#mergeでデータ合体できる
x <- xts(4:10, Sys.Date()+4:10)
y <- xts(1:6, Sys.Date()+1:6)
#SQLでいうインナージョインやレフト・ライトジョインも可能
merge(x,y)
merge(x,y, join='inner')
merge(x,y, join='left')
merge(x,y, join='right')
#mergeは列で結合するが、rbindだと行ごとに結合
rbind(x,y)

#欠損値を補間する関数もある。zooパッケージの関数na.locfをさらにgenericに。
#以下マニュアルより。
x <- xts(1:10, Sys.Date()+1:10)
x[c(1,2,5,9,10)] <- NA
x
#時系列的な意味でその値の直近値で値を補間
na.locf(x)
#↑の逆。次の日の値で今日の値を置くイメージ
na.locf(x, fromLast=TRUE)#