2017-10-13 13 views
0

Ok時系列データを扱う私はdplyrを使って1日にグループ化しています。次に、毎日のグループ内で、ローリング最大値を見つけることができます。私はその特定の行の値がその日の最大値であるかどうかを知る必要があります。そうであれば、次の最大値に達するまで現在の最大値を出力する必要があります。グループごとにローリング最大値を求める

私の手順は、これまで以下の通りです:

day.group <- new.df %>% 
    dplyr::mutate(day = format(Date, "%d")) %>% 
    dplyr::mutate(RunID = data.table::rleid(day)) %>% 
    group_by(RunID) %>% 
    dplyr::mutate(max = runMax(Close , 1)) #Borrow run max from TTR package 
    #dplyr::mutate(day.high = ifelse(Close > max,1, 0)) 

これは近いです...しかし、ローリング最大値を見つけること。私は常に、ある特定の時点でその日の最大値を見つける必要があります。私は1日のルックバックを伴うrunMaxを使用しています。これは有用ではありません。なぜなら、私がその日の最大行に戻って見ても、最後の行と最初の行を比較し、残り= NAであるからです。

本質的には、現在の行と、最初の行から前のすべての行とを比較する必要があります。 $ 2は、比較のために最初の行を設定

=MAX($F$2:F3) 

ローリング基づいて、すべての最大の発見と$ F:

Excelは、このようなものです。これは、新しいmaxが出現するまで常に各行の現在の最大値を出力します。私はそれを私のdplyrコードに置く必要があります。

ダミーデータ:

Close day RunID output 
114.19 1 1 
114.31 1 1 114.31 
114.22 1 1 114.31 
114.09 1 1 114.31 
114.28 1 1 114.31 
114.19 1 1 114.31 
114.25 1 1 114.31 
114.22 1 1 114.31 
114.25 1 1 114.31 
114.13 1 1 114.31 
114.03 1 1 114.31 
114.28 1 1 114.31 
114.19 1 1 114.31 
114.25 1 1 114.31 
114.22 1 1 114.31 
114.34 1 1 114.34 
114.19 1 1 114.34 
114.19 1 1 114.34 
114.16 1 1 114.34 
114 1 1 114.34 
114.06 1 1 114.34 
114 1 1 114.34 
114.06 1 1 114.34 
114.25 1 1 114.34 
114.16 1 1 114.34 
114.31 1 1 114.34 
114.44 1 1 114.44 
114.53 1 1 114.53 
114.59 1 1 114.59 
114.75 1 1 114.75 
114.75 1 1 114.75 
114.75 1 1 114.75 
114.91 1 1 114.91 
114.72 2 2 114.91 
114.64 2 2 114.91 
114.59 2 2 114.91 
114.52 2 2 114.91 
+3

希望の結果はどのように見えますか? 'cummax'はあなたが必要とするすべてかもしれませんが、伝えるのは難しいです。 – alistaire

+0

試してみよう...出力付 –

答えて

1
read.csv(text="Close,day,RunID,output 
114.75,1,1,114.75 
114.75,1,1,114.75 
114.75,1,1,114.75 
114.91,1,1,114.91 
114.72,2,2,114.91 
114.64,2,2,114.91 
114.59,2,2,114.91 
114.52,2,2,114.91", header=T) -> data 

cummax(data$Close) 

戻り

114.75 114.75 114.75 114.91 114.91 114.91 114.91 114.91 

これはあなたの出力列に一致するように思えます。

関連する問題