次のマトリックスがあります。
B = as.POSIXct("2015-06-21") + seq(1,18)
P = c(21.675,21.775,21.675,21.725,21.575,21.525,21.625,21.475,21.375,21.325,21.32,21.475,21.375,21.325,21.425,21.525,21.275,21.325)
A = c(-1,1,-1,1,-1,0,1,-1,0,0,0,1,-1,0,1,0,-1,1)
C = c(rep(0,15),1,0,0)
D = c(0,0,0,0,0,-1,0,0,-1,-1,-1,0,0,-1,0,0,0,0)
E = seq(1,18)
dat = as.data.frame(cbind(P,A,C,D))
rownames(dat) = B
出力マトリックスは次のようになります。
P A C D E
2015-06-21 00:00:01 21.675 -1 0 0 1
2015-06-21 00:00:02 21.775 1 0 0 2
2015-06-21 00:00:03 21.675 -1 0 0 3
2015-06-21 00:00:04 21.725 1 0 0 4
2015-06-21 00:00:05 21.575 -1 0 0 5
2015-06-21 00:00:06 21.525 0 0 -1 6
2015-06-21 00:00:07 21.625 1 0 0 7
2015-06-21 00:00:08 21.475 -1 0 0 8
2015-06-21 00:00:09 21.375 0 0 -1 9
2015-06-21 00:00:10 21.325 0 0 -1 10
2015-06-21 00:00:11 21.325 0 0 -1 11
2015-06-21 00:00:12 21.475 1 0 0 12
2015-06-21 00:00:13 21.375 -1 0 0 13
2015-06-21 00:00:14 21.325 0 0 -1 14
2015-06-21 00:00:15 21.425 1 0 0 15
2015-06-21 00:00:16 21.525 0 1 0 16
2015-06-21 00:00:17 21.275 -1 0 0 17
2015-06-21 00:00:18 21.325 1 0 0 18
列 A には -1 と 1 が交互に表示されます。目標は、ゼロがある列 A を調べ、C と D を使用してそれらを置き換えることができるかどうかを確認することです。
E 列は行番号を示し、P 列には価格情報が含まれます。列はローカルの最小ポイントと最大ポイント (-1 と 1) を示します。
したがって、行 4 と 7 の間、行 6 にゼロがあります。4 と 7 は、21.725 と 21.625 のローカル最大ポイントを示します。
行 5 が実際に行 4 と行 7 の間の最小の数値であるかどうかを確認したいと思います。行 6 の値は 21.525 で、行 5 の 21.575 と比較して低いことがわかりました。
そこで、列Aの5番目のエントリを-1から0に、6番目のエントリを0から-1に置き換えたいと思います。
上記のロジックを使用してマトリックスを調べ、最終的に次の結果を得たいと考えています。
P A C D E
2015-06-21 00:00:01 21.675 -1 0 0 1
2015-06-21 00:00:02 21.775 1 0 0 2
2015-06-21 00:00:03 21.675 -1 0 0 3
2015-06-21 00:00:04 21.725 1 0 0 4
2015-06-21 00:00:05 21.575 0 0 0 5
2015-06-21 00:00:06 21.525 -1 0 -1 6
2015-06-21 00:00:07 21.625 1 0 0 7
2015-06-21 00:00:08 21.475 0 0 0 8
2015-06-21 00:00:09 21.375 0 0 -1 9
2015-06-21 00:00:10 21.325 -1 0 -1 10
2015-06-21 00:00:11 21.325 0 0 -1 11
2015-06-21 00:00:12 21.475 1 0 0 12
2015-06-21 00:00:13 21.375 0 0 0 13
2015-06-21 00:00:14 21.325 -1 0 -1 14
2015-06-21 00:00:15 21.425 0 0 0 15
2015-06-21 00:00:16 21.525 1 1 0 16
2015-06-21 00:00:17 21.275 -1 0 0 17
2015-06-21 00:00:18 21.325 1 0 0 18
このロジックを通過する効率的なコードを書くのに問題があります。どんな助けでも大歓迎です!