【问题标题】:Rank a vector based on order in R根据 R 中的顺序对向量进行排名
【发布时间】:2013-07-21 04:55:35
【问题描述】:

我想对数据框的一列进行排名,但我希望根据其顺序而不是升序或降序对其进行排名。如下所示:

> test <- c(0,0,0,2,1,5,3)

然后像这样排名:

[1] 1 1 1 2 3 4 5

最简单的方法是什么? 提前谢谢你。

【问题讨论】:

  • 如何处理非连续重复?例如:test &lt;- c(0,2,1,0,3,5,3)?
  • @Arun 实际上,重要的因素只是元素的“顺序”,因此在您的示例中,第二个零应该得到 rank=4。所以总排名应该是:([1] 1 2 3 4 5 6 7 )对于你的例子

标签: r rank


【解决方案1】:

使用rle:

test = c(0,0,0,2,1,5,3)
rle_test = rle(test)
ordered = rep(1:length(rle_test$lengths), rle_test$lengths)

输出:

> ordered
[1] 1 1 1 2 3 4 5

【讨论】:

    【解决方案2】:

    另一种方法是在 data.table 包中使用 frankv() 的 ties="dense" 选项:

    x

    [1] 12 9 5 7 15 7 7 8 7 13 6 12 7 12 5 2 8 28 20 9 10 3 12 6 1

    frankv(x,ties="dense")

    [1] 10 8 4 6 12 6 6 7 6 11 5 10 6 10 4 2 7 14 13 8 9 3 10 5 1

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 2011-01-23
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      相关资源
      最近更新 更多