3

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

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

4

3 回答 3

5

这是一个大约占 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.
于 2013-09-30T16:34:34.803 回答
3

这将返回一个包含底部和顶部 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
于 2013-09-30T16:38:48.780 回答
1

请注意,排序可能会很慢。对于小向量,您不会注意到这么多,但是如果您想对非常大的向量执行此操作,那么对整个向量进行排序可能会非常慢,并且您不需要对向量进行完全排序。

查看partial帮助页面上的参数sort以及sort.int如何进行部分排序,它仍然可以为您提供顶部和底部 10% 而无需进行完整排序(该quantile函数在内部使用部分排序,因此在某些情况下应该更快比完整排序,但自己进行部分排序可以消除一些quantile开销并提高速度)。

于 2013-09-30T17:30:18.480 回答