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



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

举个例子:

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更pythonic的做事方式。

谁能帮忙?我想这很容易。

一个选项是获取"value"的cummax,检查它是否等于"value"

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   

最新更新