我正在尝试从时间序列数据中识别历史最大记录。我只需要识别最大记录,因为它们与到那时为止的数据有关,而不是整个向量。
一个例子:
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化的方式。
有人可以帮忙吗?我想这很容易。
答案 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