【问题标题】:How do I rank across groups in R?如何在 R 中跨组排名?
【发布时间】:2022-06-14 00:00:49
【问题描述】:

这是我的数据框

       Sales Rep order_dates  Sales in Dollars
1          John  2010-11-01           25
2          John  2008-03-25           30
3          Alex  2010-11-01            5
4          Alex  2008-03-25           15
5          Jeff  2010-11-01           31
5          Jeff  2008-03-25           2

我想根据日期在此处对各个组进行排名。例如,我想将 Jeff 列为 2010 年 11 月 1 日的第一名,约翰列为第二名,亚历克斯列为第三名。同样,我希望约翰在 2008 年 3 月 25 日排名第一,亚历克斯排名第二,杰夫排名第三。我将如何实现这一目标?

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    我们可以在按“order_dates”分组后使用dense_rank

    library(dplyr)
    df1 <- df1 %>%   
       group_by(order_dates = as.Date(order_dates)) %>% 
       mutate(Rank = dense_rank(-Sales_in_Dollars)) %>% 
       ungroup
    

    -输出

    df1
    # A tibble: 6 × 4
      Sales_Rep order_dates Sales_in_Dollars  Rank
      <chr>     <date>                 <int> <int>
    1 John      2010-11-01                25     2
    2 John      2008-03-25                30     1
    3 Alex      2010-11-01                 5     3
    4 Alex      2008-03-25                15     2
    5 Jeff      2010-11-01                31     1
    6 Jeff      2008-03-25                 2     3
    

    数据

    df1 <- structure(list(Sales_Rep = c("John", "John", "Alex", "Alex", 
    "Jeff", "Jeff"), order_dates = c("2010-11-01", "2008-03-25", 
    "2010-11-01", "2008-03-25", "2010-11-01", "2008-03-25"), 
    Sales_in_Dollars = c(25L, 
    30L, 5L, 15L, 31L, 2L)), class = "data.frame", 
    row.names = c("1", 
    "2", "3", "4", "5", "6"))
    

    【讨论】:

      猜你喜欢
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      • 2021-02-10
      相关资源
      最近更新 更多