Измерьте максимальное значение всех предыдущих значений в кадре данных - PullRequest
2 голосов
/ 22 января 2012

Я пытаюсь создать функцию, которая будет определять, является ли значение в столбце фрейма данных новым максимумом. Так, например, если у меня были следующие данные:

x <- rnorm(10,100,sd=5)
x <- data.frame(x)

Как я могу вернуть, ИСТИНА или ЛОЖЬ в новом столбце, который учитывает только все предыдущие значения. Получившаяся таблица будет выглядеть примерно так:

           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 Ответ

4 голосов
/ 22 января 2012

Существует встроенная функция, которая вычисляет рабочий максимум, называемый cummax().

diff(cummax(x)) будет ненулевым в позициях, где достигается новый максимум (нет записи для первогоэлемент x, который всегда является новым максимумом).

Соединение частей:

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

Я установил первый элемент на TRUE, но он мог простоа также NA.

...