xtsライブラリを使ってみる−1
(その2はコチラ)
先日、R勉強会に参加させていただいたときに
「時系列のデータ構造を扱う際にはxtsパッケージが便利なのではないか?」
というアドバイスをいただいたので使ってみる。
まずはマニュアルのほぼ写経コード
library(xts) data(sample_matrix) #その名の通り行列形式でデータが入っている head(sample_matrix) #xtsオブジェクトへ! sample.xts <- as.xts(sample_matrix, descr='テストデータです') #zooパッケージのクラスとxtsクラスの属性を持っているようだ class(sample.xts) str(sample.xts) #headを使うとdescrの属性の値は見えないので、無理やりだしてみる。 head(sample.xts) attr(sample.xts,'descr') #いろいろなデータの抜き方 #2007年全部(このデータだともともと2007年のデータしかないが・・・ sample.xts['2007'] #2007年3月1日以降のデータ sample.xts['2007-03::'] #2007年3月1日〜2007年4月30日までのデータ(ちょっと不思議な挙動) sample.xts['2007-03::2007-04'] #こう書くと2007年3月1日〜2007年4月1日までのデータ sample.xts['2007-03::2007-04-01'] #データの最初っから2007年1月31日まで sample.xts['::2007-01-31'] #2007年1月3日のデータだけ sample.xts['2007-01-03']
んー、日付に応じてデータ抜くのが超便利そうだ。
もうちょっと調べて使ってみる。
#月末がどのインデックスになるのか?を抜いてくる関数。超便利。 #'on'オプションで指定すれば年、週、日、秒等等もいける。 index.monthlast <- endpoints(sample.xts) #月末だけのデータを取得 sample.xts[index.monthlast] #period.〜関数群。↑のendpoints関数とあわせて使うと強力 #期間を指定して、その範囲内でmax,min,sum,などを計算する。period.applyを使えば自作関数も。 #各月ごとの1列目の値の和 period.sum(sample.xts[,1],endpoints(sample.xts)) #各月ごとの1列目の値の最大値 period.max(sample.xts[,1],endpoints(sample.xts)) #period.applyで上と同じ動作を period.apply(sample.xts[,1],endpoints(sample.xts),function(x_){max(x_)}) #さらに、各日・月・週・四半期・年ごとに処理をapplyしちゃう関数群もある。 #要するに上の関数をさらにendpointsなしに圧縮して書くことができる。 #各月ごとの1列目の最大値 apply.monthly(sample.xts[,1],max) #各週ごとの1列目の平均値 apply.weekly(sample.xts[,1],mean) #Rにデフォルトで入っていてもよさそうな、データの初めの要素と終わりの要素を抜く関数もあった #いちいちhead(x,1)みたいに書くのめんどいよね。 first(sample.xts) last(sample.xts) #データが何日・年・四半期分あるか。 ndays(sample.xts) nyears(sample.xts) nquarters(sample.xts)
おぉ、これはかなり便利だ!period.apply最強。
マニュアルを隅から隅まで読んでもいいな。
【補足】
xtsパッケージに関するわかりやすい解説が載っている記事。ありがたい。
http://www-csfi.sigmath.es.osaka-u.ac.jp/faculty/personal/fukasawa/20100118.pdf