2

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

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
4

1 回答 1

4

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

diff(cummax(x))在达到新最大值的位置将是非零的(没有第一个元素的条目x,它始终是新的最大值)。

把碎片放在一起:

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

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

于 2012-01-22T08:46:35.560 回答