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

R 在时间序列中查找历史最大值,r,time-series,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.

我试图从时间序列数据中识别历史最大记录。我只需要确定最大记录,因为它们涉及到该点之前的数据,而不是整个向量

例如:

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
时间1的值是记录,因为在此之前不存在值,因此它是最大值。时间3的项目是记录,因为它高于时间1的项目。时间10的值是记录,因为它高于时间3的值

我所能做的就是测试整个向量的最大值(即识别时间10的值),而不是直到所考虑的时间值为止的向量。我试图通过dplyr进行变异,但它不起作用。然后我考虑编写一个for循环,它将值附加到向量,并在新向量中查找最大值。这让我想到了一些帖子,这些帖子暗示这是一种比R更具蟒蛇风格的做事方式


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

一个选项是获取'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   
库(dplyr)
df%>%
变异(记录=c('no','yes')[(值==cummax(值))+1])
#一个tibble:10x3
#时间值记录
#      
#1 17.76是的
#2.6.26号
#3.8.28是的
#4.8.24否
#5 6.78否
#6 2.08号
#7.4.46否
#8 1.34号
#9 3.64号
#10109.08是的

为什么不
df%>%变异(记录=if\u else(值==cummax(值),“是”,“否”))
?担心浮点吗?太好了,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