繁体   English   中英

如何在 R 中使用 dplyr 计算不同的组

[英]How to count different groups using dplyr in R

我有以下 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

对此有什么建议吗?

用这个

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

为每个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是基于递减差异的排名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM