Как вернуть 5 самых верхних значений из вектора в R? - PullRequest
29 голосов
/ 12 сентября 2010

У меня есть вектор, и я могу вернуть самое высокое и самое низкое значение, но как вернуть 5 самых верхних значений? Для этого есть простое однострочное решение?

Ответы [ 4 ]

51 голосов
/ 12 сентября 2010
> a <- c(1:100)
> tail(sort(a),5)
[1]  96  97  98  99 100
19 голосов
/ 12 сентября 2010
x[order(x)[1:5]]
3 голосов
/ 12 сентября 2010
tail(sort.int(x, partial=length(x) - 4), 5)

Использование sort.int с частичным имеет преимущество в том, что он (потенциально) быстрее (потенциально) не выполняет полную сортировку. Но на самом деле моя реализация выглядит немного медленнее. Может быть, это связано с тем, что с параметром частичным! = NULL используется сортировка оболочки, а не быстрая сортировка?

> x <- 1:1e6
> system.time(replicate(100, tail(sort.int(x, partial=length(x) - 4), 5)))
   user  system elapsed 
  4.782   0.846   5.668
> system.time(replicate(100, tail(sort(x), 5)))
   user  system elapsed 
  3.643   0.879   4.854 
3 голосов
/ 12 сентября 2010

Да, head( X, 5), где X - ваш отсортированный вектор.

...