【问题标题】:How to count different groups using dplyr in R如何在 R 中使用 dplyr 计算不同的组
【发布时间】:2021-03-30 07:13:52
【问题描述】:

我有以下 df 结构:

category difference factor
a        -0.12      1
a        -0.12      2
b        -0.17      3
b        -0.21      4

我想对这些数据进行分类,以便我可以通过数字分别标识每个类别,并根据递减的差异对它们进行排名。预期的结果是这样的:

category difference factor catCount rank
a        -0.12      1      2        2
a        -0.12      2      2        1
b        -0.17      3      1        2
b        -0.21      4      1        1

我正在使用以下代码来实现这一点:

df %>% group_by(category) %>% mutate(categoryNumber = n_distinct(category)) %>% mutate(rank = rank(difference, ties.method = 'last'))

但输出如下:

category difference factor catCount rank
a        -0.12      1      2        2
a        -0.12      2      2        1
b        -0.17      3      2        2
b        -0.21      4      2        1

对此有何建议?

【问题讨论】:

  • 为什么“a”类别的 catCount 为 2 而“b”为 1?数字重要还是您需要任何唯一的数字?

标签: r dplyr


【解决方案1】:

使用这个

df %>% group_by(category, catcnt = dense_rank(desc(category))) %>% 
  mutate(rank = rank(difference, ties.method = 'last'))

# A tibble: 4 x 5
# Groups:   category [2]
  category difference factor catcnt  rank
  <chr>         <dbl>  <int>  <int> <int>
1 a             -0.12      1      2     2
2 a             -0.12      2      2     1
3 b             -0.17      3      1     2
4 b             -0.21      4      1     1

【讨论】:

    【解决方案2】:

    为每个category 计算n_distinct category 总是1。试试这个:

    library(dplyr)
    
    df %>% 
      arrange(category, difference) %>%
      group_by(category) %>% 
      mutate(catCount = cur_group_id(), 
             rank = row_number()) %>%
      ungroup()
    
    #  category difference factor catCount  rank
    #  <chr>         <dbl>  <int>    <int> <int>
    #1 a             -0.12      1        1     1
    #2 a             -0.12      2        1     2
    #3 b             -0.21      4        2     1
    #4 b             -0.17      3        2     2
    

    这里catCount 是每个category 的唯一编号,而rank 是基于递减差异的排名。

    【讨论】:

      猜你喜欢
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多