2016年6月20日月曜日

新高値更新回数を数える・・・累積最大値cummax

5月29日に、新高値の回数を数える問題を考えた。

当日の最高値がそれ以前の最高値以上となる日数を数える問題だ。

for文で回していたのだが、cummaxの存在を忘れていた。

zはxts型のオブジェクト(約1年分の4値データ)である。


これだけでOKだ。

一応解説しておく。

Hiは4値のうちの高値を求める関数。高値のベクトル(実はxts型)となる。
cummaxは累積最大値。それ以前の最大値からなるベクトルとなる。(xts型)
sum関数内では、TRUEは1、FALSEは0として扱われる。

恥ずかしいことです。

なお、前日以前の最高値と当日の高値が同じ場合は、本来は新高値ではないけれど、上の方法では新高値としてカウントされてしまう。
それを避けるなら、


lagで前日までの最高値を求め、当日の高値の方が高い日を数える。lagを使うと初日にNAが入る。NAが入るとsumはNAになってしまう。従って、na.rm=TでNAは除いて数えている。

0 件のコメント:

コメントを投稿