【问题标题】:How to rank a column with a condition如何根据条件对列进行排名
【发布时间】:2018-09-27 21:00:32
【问题描述】:

我有一个数据框:

dt <- read.table(text = "
1 390 
1 366
1 276 
1 112 
2 97
2 198  
2 400  
2 402
3 110
3 625
4 137
4 49
4 9
4 578 ")

第一列是索引,第二列是距离。

我想添加一个列来按Index对距离进行降序排列(距离最高的会排在最前面)

结果将是:

dt <- read.table(text = "
1 390 1
1 66  4
1 276 2
1 112 3
2 97  4
2 198 3 
2 300 2
2 402 1
3 110 2
3 625 1
4 137 2
4 49  3
4 9   4
4 578 1")

【问题讨论】:

    标签: r rank


    【解决方案1】:

    另一种基于 R 的方法

    > dt$Rank <- unlist(tapply(-dt$V2, dt$V1, rank))
    

    一个tidyverse解决方案

    dt %>% 
      group_by(V1) %>% 
      mutate(Rank=rank(-V2))
    

    【讨论】:

      【解决方案2】:
      transform(dt,s = ave(-V2,V1,FUN = rank))
         V1  V2 s
      1   1 390 1
      2   1  66 4
      3   1 276 2
      4   1 112 3
      5   2  97 4
      6   2 198 3
      7   2 300 2
      8   2 402 1
      9   3 110 2
      10  3 625 1
      11  4 137 2
      12  4  49 3
      13  4   9 4
      14  4 578 1
      

      【讨论】:

        【解决方案3】:

        您可以grouparrangerownumber。我认为,结果比简单的rank 看起来更容易一些,因此值得多做一步。

        dt %>% 
          group_by(V1) %>% 
          arrange(V1,desc(V2)) %>% 
          mutate(rank = row_number())
        
        # A tibble: 14 x 3
        # Groups:   V1 [4]
              V1    V2  rank
           <int> <int> <int>
         1     1   390     1
         2     1   366     2
         3     1   276     3
         4     1   112     4
         5     2   402     1
         6     2   400     2
         7     2   198     3
         8     2    97     4
         9     3   625     1
        10     3   110     2
        11     4   578     1
        12     4   137     2
        13     4    49     3
        14     4     9     4
        

        另一种选择是min_rank

        dt %>% 
          group_by(V1) %>% 
          mutate(min_rank(desc(V2)) )
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-13
          • 2019-12-18
          相关资源
          最近更新 更多