web-dev-qa-db-ja.com

Rのベクトルから5つの最上位値を返す方法は?

ベクトルがあり、最高値と最低値を返すことができますが、5つの最上位値を返す方法は?このための簡単な1行のソリューションはありますか?

30
pixel
> a <- c(1:100)
> tail(sort(a),5)
[1]  96  97  98  99 100
53
chrisamiller
x[order(x)[1:5]]
20
hadley

はい、head( X, 5)ここで、Xはソートされたベクトルです。

3
tail(sort.int(x, partial=length(x) - 4), 5)

Sort.intをpartialとともに使用すると、完全なソートを(潜在的に)行わないことにより(潜在的に)高速になるという利点があります。しかし実際には、私の実装は少し遅く見えます。たぶんこれは、パラメーターの部分!= 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
David F