正如标题中介绍的那样,我想从向量中选择 10% 的最高值和 10% 的最低值。我怎么能做到这一点?
任何人都可以帮助我吗?非常感谢
这是一个大约占 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.
这将返回一个包含底部和顶部 10% 的向量x
:
> 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
请注意,排序可能会很慢。对于小向量,您不会注意到这么多,但是如果您想对非常大的向量执行此操作,那么对整个向量进行排序可能会非常慢,并且您不需要对向量进行完全排序。
查看partial
帮助页面上的参数sort
以及sort.int
如何进行部分排序,它仍然可以为您提供顶部和底部 10% 而无需进行完整排序(该quantile
函数在内部使用部分排序,因此在某些情况下应该更快比完整排序,但自己进行部分排序可以消除一些quantile
开销并提高速度)。