【问题标题】:How can I rank on more than one variable in dplyr如何在 dplyr 中对多个变量进行排名
【发布时间】:2014-08-08 20:39:51
【问题描述】:

如果我有

library(dplyr)
 df <- data.frame(name=c("A","B","C","D"),value1=c(8,9,8,10),value2=c(1,2,3,4))
 df 
      name value1 value2
   1    A      8      1
   2    B      9      2
   3    C      8      3
   4    D     10      4 

 # I want to do something like this without the error

newdf <- df %>%
mutate(rank=row_number(desc(value1),desc(value2)))

newdf
    name value1 value2 rank
1    A      8      1    4
2    B      9      2    2
3    C      8      3    3
4    D     10      4    1

如何根据一列对行进行排名并在出现平局时使用第二列?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    现在我进一步看了一下,我认为这可以解决问题

    df %>% arrange(desc(value1),desc(value2)) %>% mutate(rank=row_number())
    

    【讨论】:

      【解决方案2】:

      以下代码将产生与您在问题中发布的相同结果。这是row_number() 将返回的内容,但您的原始数据不必重新排列。

      newdf <- df %>%
        mutate(rank=order(-value1,-value2))
      

      请注意:如果您想要dense_rank,此代码将不会这样做。

      【讨论】:

        猜你喜欢
        • 2016-04-30
        • 2023-03-05
        • 2020-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多