R group_by返回最大唯一类型的数量

时间:2019-05-11 23:59:32

标签: r dplyr

假设我有此数据集:

df <-  data.frame(c('a', 'a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'b', 'b'),
  c('c', 'c', 'd', 'e', 'f', 'c', 'e', 'f', 'f', 'f', 'g', 'h', 'f')
    ) %>% setNames(c('type', 'value'))

   type value
1     a     c
2     a     c
3     a     d
4     a     e
5     a     f
6     a     c
7     b     e
8     b     f
9     b     f
10    b     f
11    b     g
12    b     h
13    b     f

我想执行以下某种命令:

df %>% group_by(type) %>% 
  summarise_all(funs(largest_group_size))

理想情况下,这将产生一个表,其中a和b的任何值的数量最多。

  type largest_group_size
1    a                  3
2    b                  4

此表将具有:

  • a的3个,因为a的c值为3,并且c是a的最大组。
  • b的4,因为b的f有4个值,并且f是b的最大组。

理想情况下,我想更进一步,并按类型计算最大的群体占整体的百分比。所以(largest_group_size / n())。

1 个答案:

答案 0 :(得分:2)

分两个group_by步骤:

df %>% 
  group_by(type, value) %>% 
  summarise(groups = n()) %>% 
  group_by(type) %>% 
  summarise(largest_group = max(groups),
            as_percentage = largest_group / sum(groups))

这给出了:

  type  largest_group as_percentage
  <fct>         <dbl>         <dbl>
1 a                 3         0.5  
2 b                 4         0.571

可能有一种更有效的方法,但这就是我急着要这样做的方式。