38

ベクトルがあり、最高値と最低値を返すことができますが、最上位の 5 つの値を返すにはどうすればよいですか? これに対する簡単な1行の解決策はありますか?

4

4 に答える 4

71
> a <- c(1:100)
> tail(sort(a),5)
[1]  96  97  98  99 100
于 2010-09-11T21:23:43.160 に答える
22
x[order(x)[1:5]]
于 2010-09-11T23:07:39.983 に答える
4

はい、ソートされたベクトルはhead( X, 5)どこにありますか。X

于 2010-09-11T20:44:00.750 に答える
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 
于 2010-09-12T08:07:32.397 に答える