正如标题中所介绍的,我想从矢量中选择10%最高值和10%最低值。我怎么能设法做到这一点?
任何人都可以帮助我吗? 非常感谢
答案 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)
请注意,排序可能非常慢。对于小矢量,你不会注意到这么多,但是如果你想对非常大的矢量做这个,那么对整个矢量进行排序可能非常慢,你不需要对矢量进行完全排序。
请查看partial
和sort
帮助页面上的sort.int
参数,了解如何进行部分排序,无需进行操作即可获得最高和最低10%完全排序(quantile
函数在内部使用部分排序,因此在某些情况下应该比完全排序更快,但是自己进行部分排序可以消除一些quantile
开销并提供更多速度也是如此)。