我正在尝试创建一个函数来确定数据框的列中的值是否为新的高值。例如,如果我有以下数据:
x <- rnorm(10,100,sd=5)
x <- data.frame(x)
如何在仅考虑所有先前值的新列中返回,TRUE或FALSE。结果表看起来像:
x new.max
1 102.42810 NA
2 109.22762 TRUE
3 101.97970 FALSE
4 101.49303 FALSE
5 93.30595 FALSE
6 96.77199 FALSE
7 110.96441 TRUE
8 96.27485 FALSE
9 101.77163 FALSE
10 100.78992 FALSE
如果我尝试
x$new.max <- ifelse ( x$x == max(x$x) , TRUE, FALSE )
结果表如下所示,因为它计算整个列的最大值,而不是所有先前值的子集。
x new.max
1 102.42810 FALSE
2 109.22762 FALSE
3 101.97970 FALSE
4 101.49303 FALSE
5 93.30595 FALSE
6 96.77199 FALSE
7 110.96441 TRUE
8 96.27485 FALSE
9 101.77163 FALSE
10 100.78992 FALSE
答案 0 :(得分:4)
有一个内置函数可以计算运行的最大值,称为cummax()
。
diff(cummax(x))
将为非零(x
的第一个元素没有条目,这始终是新的最大值。
把各个部分放在一起:
new.max <- c(TRUE, diff(cummax(x)) > 0)
我已将第一个元素设置为TRUE
,但它也可能是NA
。