2016-05-06 5 views
1

Я ищу способ получить второй (третий, четвертый и т. Д.) Наименьший/самый большой элемент списка в R. Используя who.min/which.max Я придумал следующее решение для второго по величине элемента:Как получить второй наименьший/самый большой элемент в списке

test <- c(9,1,3,5,2,4,10) 
(test[-which.max(test)])[which.max(test[-which.max(test)])]] 

Однако, это некрасиво и не очень масштабов. Есть ли лучший способ получить x наименьший/наибольший элемент/значение списка?

+1

Http: // StackOverflow .com/questions/2453326/fastest-way-to-find-second-third-high-low-value-in-vector-or-column, это выглядит актуальным, но я все еще не вижу ни одного из O (n) решения, частичная сортировка по-прежнему O (nlogn) – Shape

ответ

1

Вы можете использовать сортировку, а затем индекс, чтобы найти п-й наименьший элемент:

sort(test)[n] 

Для второго наименьшего элемента используйте n=2:

sort(test)[2] 
+1

Конечно :-) И получить индекс, сочетающий его с совпадающими работами perfec ждение. match (sort (test, уменьшение = TRUE) [2], тест). Спасибо. –

+0

этот ответ, безусловно, работает, но если вы сортируете, чтобы найти только один элемент, кажется, что вы немного неэффективны. Поиск n-го наивысшего элемента должен быть O (N), а не O (nlogn) – Shape