测量数据框中所有先前值的最大值

时间:2012-01-22 08:42:58

标签: r if-statement lapply

我正在尝试创建一个函数来确定数据框的列中的值是否为新的高值。例如,如果我有以下数据:

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

1 个答案:

答案 0 :(得分:4)

有一个内置函数可以计算运行的最大值,称为cummax()

在达到新的最大值的位置,

diff(cummax(x))将为非零(x的第一个元素没有条目,这始终是新的最大值。

把各个部分放在一起:

new.max <- c(TRUE, diff(cummax(x)) > 0)

我已将第一个元素设置为TRUE,但它也可能是NA