2012-01-22 1 views
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

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

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

Ввод куски вместе:

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

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

+0

Ничего себе, спасибо. Мне нравится узнать о функциях в R, о которых я никогда не слышал. – Kevin

Смежные вопросы