RでCSV形式などの株価データを扱うときに便利なコマンドを載せておきます。
例としてnikkei.csvというものを変数(オブジェクト)xとして読み込ませる時
> x<-read.table(”nikkei.csv”)
※(読込むファイルは作業用ディレクトリに置いておく必要があります。作業用ディレクトリの指定についてはこちらを参照)
Rのオブジェクトには、ベクトルや行列(matrix)やデータフレーム(dataframe)や時系列データ(xts)など種類があり、データ処理をするにあたってそのデータの種類を把握しておかないと上手くいかないことがあります。
オブジェクトの種類を把握するにはclass(オブジェクト名)を使います。
> class(x)
もしオブジェクトxが、データフレームであった時は
[1]”dataframe”
となります。
読み込んだ オブジェクトxをhead()関数で最初の一部だけみてみると
V2だかV3だかいらない記号が頭についてます。
どうやらRはデータ読み込み時に列の名前を自動的に付加するようです。
このV1とかをつけないようにするには、header=TRUEと引数を加えればいいです。
x<-read.table("nikkei.csv",header=TRUE)
ちゃんとVが消えてます。
これでヘッダーが入力ファイルに含まれるようになったので[,]演算子を使って特定の要素を取り出すことが可能となります。
> x[1,3]
[1] 24109.89
> y<-x[,"close"]
> head(y)
[1] 24069.18 23736.57 22897.84 22969.27 23047.36 23241.02
しかし、これはデータの順番が新しい日時からなので、時系列データ分析に使うtsパッケージが使えなかったりちょっと不便なので、列をそのままひっくり返さなければなりません。そういうときに使うのがrev()関数です。
x<-x[rev(rownames(x)),,drop=FALSE]
※drop=FALSEはデータフレームがベクトルになるのを防いでいます。
ちなみに時系列データの代表形式であるxts形式のまま出力すると日付が出力されないので、日付を付けて出力したいのであれば、一旦as.data.frame()で変換するほうがいいです。
基本的な統計量を表形式で入手したときは、summary()関数を使います。
> summary(y)
Min. 1st Qu. Median Mean 3rd Qu. Max.
7055 10910 15510 15030 18060 27150
こういう基本的統計量でデータ構造に問題点がないかを簡易チェックすることができるので大切です。
>write.table ( x, "ファイル名.txt" )
>write.table ( x, "ファイル名.csv" )
おまけ:サンプルの行番号を省いて「テキストファイル」に保存する上の write.table ( x, "ファイル名.txt" ) だと サンプルの行番号 1 2 3・・・・が出力したファイルに記入されてしまいます。
この行番号を付けないでファイルを出力する場合は, write.table ( x, "ファイル名.txt", row.names=F ) と記述します。(列番号の時はrowをcolに変えるだけ)