我正在尝试从时间序列数据中识别历史最大记录。我只需要识别最大记录,因为它们与该点之前的数据有关,而不是整个向量。
举个例子:
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