2019年8月19日月曜日

行列 matrix() 変換 その2


please also check this post.

目的

 指数日次終値データを格納する配列が存在し、その各日付データについて当日を含む過去100営業日分の範囲内で最高値を求めるものとする。通常の言語であればfor文をつかうところだが、Rの場合for文を使用すると処理が大変遅くなるので行列を使用する。

処理内容

各日付における過去100営業日以内の最高値の算出


  •  配列のサイズが17519のとき、切りが良いように20番目から17519番目の要素だけを抜き出す。
  •  行列「1」を作成する。列数100、byrow=t。
    • 1行目は21,22,23,,,,,,120。
    • 2行目は121,122,123,,,,,,220。
    • 最終174行目は17321,17322,17333,,,,,17420。
  • 行単位でapply()関数を使用して、max()それをapply(matrix,1,max)を使用し各行の最高値を出す。これで、120日目、220日目、、17420日目時点での最高値が記録される。
  •  インデックスを一つ進め同様に処理する。つまり、配列「2」を作成する。
    • 1行目は22,23,24,,,,,121。
    • 2行目は122,123,124,,,,,221。
    • 最終174行目は17322,17323,17324,,,,17421。
  • 同じくapply(matrix,1,max)を使用し各行の最高値を出す。これで、121日目、221日目、、17421日目時点での最高値が記録される。
  • これを最後まで繰り返す。
  • 各行ごとの出力結果をすべてappend()すると、120,220,,17420,121,221,,17421,,,,,219,319,,,17519日目の結果が格納された配列「w」ができる。


出力結果の並び替え

 配列「w」をmatrix(w,ncol=174,byrow=T)つかって行列に変換する。すると日付で言えば、

   120日目の結果,220日目の結果,,17420日目の結果
   121日目の結果,221日目の結果,,17421日目の結果
   ,,,,,
   219日目の結果,319日目の結果,,,17519日目の結果

となる行数=100x列数=174の配列ができる。
これをさらに、matrix(matrix(w,ncol=174,byrow=T),ncol=1,byrow = T)で列数=1の行列に変換後、as.vector()すると。「120,121,219,220,221,,,319,,,,17420,17421,,,,,17519日目」の結果を日付順に並べた配列が完成する。

0 件のコメント: