查找时间序列中的历史最大值

时间:2019-08-26 22:53:31

标签: r time-series

我正在尝试从时间序列数据中识别历史最大记录。我只需要识别最大记录,因为它们与到那时为止的数据有关,而不是整个向量。

一个例子:

set.seed(431)
df <- data.frame(time = c(1:10), value = runif(10, 1, 10))

df
   time    value
1     1 7.758703
2     2 6.262849
3     3 8.281712
4     4 8.243617
5     5 6.781752
6     6 2.078103
7     7 4.455353
8     8 1.339119
9     9 3.635554
10   10 9.084619

我想做的是生成一个向量,该向量标识出随时间向前移动的以下记录最高数字:

   time    value record
1     1 7.758703    yes
2     2 6.262849     no
3     3 8.281712    yes
4     4 8.243617     no
5     5 6.781752     no
6     6 2.078103     no
7     7 4.455353     no
8     8 1.339119     no
9     9 3.635554     no
10   10 9.084619    yes

时间1的值是一条记录,因为在此之前没有值,因此为最大值。时间3的项目是一条记录,因为它比时间1的项目高。时间10的值是记录,因为它的项目高于时间3。

我所能做的就是测试整个向量的最大值(即确定时间10处的值),而不是直到所考虑的时间值为止的向量。我正在尝试通过dplyr进行突变,但无法正常工作。然后,我看了写一个for循环,该循环会将值附加到向量上,并在该新向量中寻找最大值。那导致我发表帖子,暗示那是比R做事更Python化的方式。

有人可以帮忙吗?我想这很容易。

1 个答案:

答案 0 :(得分:2)

一种选择是获取cummax的“值”,检查其是否等于“值”

library(dplyr)
df %>% 
    mutate(record = c('no', 'yes')[(value == cummax(value)) + 1])

# A tibble: 10 x 3
#    time value record
#   <int> <dbl> <chr> 
# 1     1  7.76 yes   
# 2     2  6.26 no    
# 3     3  8.28 yes   
# 4     4  8.24 no    
# 5     5  6.78 no    
# 6     6  2.08 no    
# 7     7  4.46 no    
# 8     8  1.34 no    
# 9     9  3.64 no    
#10    10  9.08 yes