【Rによるデータサイエンス】行・列処理のためのapply関数
本題の前に1つ間違ったことをメモ。
「【Rによるデータサイエンス】第2章 データの入出力と編集 データファイル読み込み」にて使用したread.csvとread.table。その時は、違いが分かっていなかったけど、今回初めて知った違いがあった。
read.tableを使用して読み込んだデータは、1行!
なぜなら、データがスペースで区切られていないから!
> testReadTable<-read.table("D:/01_dev/04_DataAnalysis/FX_data/GBPJPY240.csv") > class(testReadTable) [1] "data.frame" > nrow(testReadTable) [1] 2049 > ncol(testReadTable) [1] 1
一方、read.csvだと期待する形になっとる。
データがカンマ区切りだから!
> testReadCSV<-read.csv("D:/01_dev/04_DataAnalysis/FX_data/GBPJPY240.csv") > class(testReadCSV) [1] "data.frame" > nrow(testReadCSV) [1] 2048 > ncol(testReadCSV) [1] 6
これで、列ごとの平均を計算したりできる。
例えば、2012年12月18日から2014年4月14日までのGBPJPY4時間足のデータの終値の最大値は次のように求められる。
> GBPJPY240[1,] Date Time Open Close High Low 1 2012/12/18 12:0 136.142 135.953 136.213 135.805 > max(GBPJPY240[,4]) [1] 174.784
これだと4列目のClose値だけだが、Open、Close、High、Lowの最高値を纏めて求めたいときに、1つずつ4回max関数を実行しても良いが、apply関数を使用すると一度に求めることができる。
> apply(GBPJPY240[,3:6],2,max) Open Close High Low 174.780 174.784 174.815 174.471