各行の最大 2 つの値を識別し、それらの列番号と値を提供するコードを作成しようとしています。
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)
私が知る限り、2 番目に高い値に相当する関数は存在しないため、これを行うと少しややこしくなります。このコードを使用すると、2 番目に高い値が得られますが、(重要なことに) 同点の状況ではそうではありません。また、それは危険に見えます。
sec.fun <- function (x) {
max( x[x!=max(x)] )
}
df$val2 <- apply(df[ ,1:4], 1, sec.fun)
元のデータを削除せず、3 番目、4 番目に高い値を見つけるために使用できるソリューションが理想的ですが、どちらも必須要件ではありません。