Encontrar o número da coluna e valorizar o segundo maior valor em uma linha
Eu estou tentando escrever algum código que identifica os dois maiores valores para cada linha e fornece seu número de coluna e valor.
<code>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)) </code>
Eu consegui fazer isso para o valor máximo usando omax
emax.col
funções.
<code>df$max = max.col(df,ties.method="first") df$val = apply(df[ ,1:4], 1, max) </code>
Tanto quanto eu sei, não há funções equivalentes para o segundo maior valor, então isso tornou as coisas um pouco mais complicadas. Usando este código fornece o segundo maior valor, mas (importante) não em situações com empates. Também parece arriscado.
<code>sec.fun <- function (x) { max( x[x!=max(x)] ) } df$val2 <- apply(df[ ,1:4], 1, sec.fun) </code>
Idealmente, a solução não envolveria a remoção de nenhum dado original e poderia ser usada para encontrar o terceiro, quarto ... maior valor, mas nenhum deles é um requisito essencial.