Есть ли что-то вроде индекса pmax? - PullRequest
5 голосов
/ 22 ноября 2011

У меня есть фрейм данных со следующими данными:

date=strptime(c(20110101,20110102,20110103,20110104,20110105,20110106),'%Y%m%d')
rate1=c(1,2,3,4,5,6)
rate2=c(2,1,3,6,8,4)
rate3=c(4,1,3,6,8,3)
rate4=c(7,8,9,2,1,8)
z=data.frame(date,rate1,rate2,rate3,rate4)
z$max=pmax(rate1,rate2,rate3,rate4)

Функция pmax позволяет мне получить максимальное значение для этой записи, но мне было интересно, как я могу получить индекс максимального значениядля этой записи.

Где z $ max будет равно 7,8,9,6,8,8, я хотел бы получить 5,5,5,3,3,5

Возможно ли это?Я знаю, что это кажется чем-то простым, но я нигде не могу найти ответ.

Ответы [ 2 ]

13 голосов
/ 22 ноября 2011

Вы можете использовать max.col:

> z$max = max.col(z[2:5])+1
> z
        date rate1 rate2 rate3 rate4 max
1 2011-01-01     1     2     4     7   5
2 2011-01-02     2     1     1     8   5
3 2011-01-03     3     3     3     9   5
4 2011-01-04     4     6     6     2   3
5 2011-01-05     5     8     8     1   3
6 2011-01-06     6     4     3     8   5

Я думаю, вы имеете в виду, что вы хотели индекс, но вы используете только 4 вектора, поэтому, чтобы найти то, что вы хотите, вынужно найти индекс, а затем добавить 1.

3 голосов
/ 22 ноября 2011

Очень просто в базе R:

z$wmax <- apply(z[, -c(1,6)],1, which.max)

На самом деле это дает вам на 1 меньше, чем вы просили, поскольку я исключил первый столбец, но это легко исправить, добавив один.

z$max_col_n <- apply(z[, -c(1,6)],1, which.max) +1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...