Поиск номера столбца и значения второго по величине значения в строке

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

df = data.frame( car = c (2,1,1,1,0), bus = c (0,2,0,1,0),
                 walk = c (0,3,2,0,0), bike = c(0,4,0,0,1))

Мне удалось добиться этого для максимального значения с помощью функций maxи max.col.

df$max = max.col(df,ties.method="first")
df$val = apply(df[,1:4], 1, max)

Насколько я знаю, не существует эквивалентных функций для второго по величине значения, поэтому это немного усложнило задачу. Использование этого кода дает второе по величине значение, но (важно )не в ситуациях с ничьей. К тому же это выглядит рискованно.

sec.fun <- function (x) {
  max( x[x!=max(x)] )
}

df$val2 <- apply(df[,1:4], 1, sec.fun)

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

6
задан 989 11 July 2016 в 15:48
поделиться