Ermitteln der Spaltennummer und des Werts des zweithöchsten Werts in einer Zeile

Ich versuche, einen Code zu schreiben, der die zwei größten Werte für jede Zeile identifiziert und deren Spaltennummer und Wert angibt.

<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>

Ich habe es geschafft, dies für den maximalen Wert mit dem zu tunmax undmax.col funktionen.

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

Soweit mir bekannt ist, gibt es keine entsprechenden Funktionen für den zweithöchsten Wert. Dies hat die Dinge etwas schwieriger gemacht. Die Verwendung dieses Codes liefert den zweithöchsten Wert, jedoch (wichtig) nicht in Situationen mit Bindungen. Auch es sieht riskant aus.

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

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

Idealerweise würde die Lösung nicht das Entfernen von Originaldaten beinhalten und könnte verwendet werden, um den dritt-, viert- und höchsten Wert zu finden, aber keine dieser beiden Anforderungen ist wesentlich.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage