R – Fastest way to find *the index* of the second (third…) highest/lowest value in vector or column

r

Fastest way to find the index of the second (third…) highest/lowest value in vector or column ?

i.e. what

sort(x,partial=n-1)[n-1]

is to

max()

but for

which.max()

Best,

Fastest way to find second (third…) highest/lowest value in vector or column

Best Answer

One possible route is to use the index.return argument to sort. I'm not sure if this is fastest though.

set.seed(21)
x <- rnorm(10)
ind <- 2
sapply(sort(x, index.return=TRUE), `[`, length(x)-ind+1)
#        x       ix 
# 1.746222 3.000000