【问题标题】:How to select the 10% of highest and lowest values from a vector in R?如何从 R 中的向量中选择最高和最低值的 10%?
【发布时间】:2013-10-06 14:45:05
【问题描述】:

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

有人可以帮助我吗? 非常感谢

【问题讨论】:

  • 还有,看看?quantile

标签: r subset highest


【解决方案1】:

这是一个大概占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.

【讨论】:

  • 你说得对,我是R的新用户,所以可能一些基本的问题对我来说似乎也很难,反正你的cmets没问题,我应该改进和学习更多。谢谢。
  • @Oscar-fr 仅供参考-一般来说,简单的问题很好。我们大多数人确实喜欢帮助新的 R 用户。然而,令人沮丧的是,当人们问我们“我该怎么做 X?”时。并为任务提供规范,但没有代码可以演示您尝试过的内容。将来,请确保您先尝试一下,然后在问题中分享您尝试过的内容。
  • 在未来的问题之前,建议阅读以下内容:thisthisthis。欢迎使用 stackoverflow!
  • 为什么不只排序一次,然后使用headtail 从两端获取值?
  • @GregSnow 你还需要找到那 10% 吗?我刚刚了解到headn 参数,但这如何让您获得第一个10%
【解决方案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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-12-31
      • 1970-01-01
      • 2016-08-16
      • 2017-04-13
      • 2021-08-22
      • 1970-01-01
      • 2019-08-21
      • 2021-11-12
      • 2011-04-11
      相关资源
      最近更新 更多