2017-10-13 67 views
0

確定即時消息與時間序列數據一起工作。我正在使用dplyr按每天進行分組。然後在每一天的小組中,我希望找到滾動的最大值。我需要知道如果特定的行值是一天中的最大值,如果是,那麼我想我需要打印當前的最大值,直到遇到下一個最大值。查找每個組的滾動最大值

我的程序至今低於:

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。

本質上,我需要將當前行與第一行中的所有前面的行進行比較......以每行爲基礎的最後一行。

Excel是這樣的:

=MAX($F$2:F3) 

所有的查找最大軋製基礎上,$ F $ 2的設定第一行進行比較。這將始終打印每行的當前最大值,直到遇到新的最大值。我需要把它放在我的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 

這似乎符合您的輸出列。