Я пытаюсь написать код, который идентифицирует два наибольших значения для каждой строки и предоставляет их номер столбца и значение.
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)
В идеале решение не должно включать удаление каких-либо исходных данных и может быть использовано для поиска третьего, четвертого... наивысшего значения, но ни одно из этих требований не является существенным.