如何从R中的向量中选择10%的最高值和最低值?

时间:2013-09-30 16:32:20

标签: r subset highest

正如标题中所介绍的,我想从矢量中选择10%最高值和10%最低值。我怎么能设法做到这一点?

任何人都可以帮助我吗? 非常感谢

3 个答案:

答案 0 :(得分:4)

这是一个大约需要10%的例子:

v <- rnorm(100)
sort(v)[1:(length(v)/10)]                  # lowest, in increasing order.
sort(v, decreasing=TRUE)[1:(length(v)/10)] # highest, in decreasing order.

答案 1 :(得分:2)

这将返回一个包含x的底部和前10%的向量:

> set.seed(123)
> x<-rnorm(100)
> x[{q<-rank(x)/length(x);q<0.1 | q>=0.9}]
 [1]  1.558708  1.715065 -1.265061  1.786913 -1.966617 -1.686693 -1.138137
 [8]  1.253815 -1.265396  2.168956 -1.123109  1.368602  1.516471 -1.548753
[15]  2.050085 -2.309169 -1.220718  1.360652  2.187333  1.532611

答案 2 :(得分:1)

请注意,排序可能非常慢。对于小矢量,你不会注意到这么多,但是如果你想对非常大的矢量做这个,那么对整个矢量进行排序可能非常慢,你不需要对矢量进行完全排序。

请查看partialsort帮助页面上的sort.int参数,了解如何进行部分排序,无需进行操作即可获得最高和最低10%完全排序(quantile函数在内部使用部分排序,因此在某些情况下应该比完全排序更快,但是自己进行部分排序可以消除一些quantile开销并提供更多速度也是如此)。