[英]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.