R group_by возвращает номер наибольшего уникального типа - PullRequest
0 голосов
/ 12 мая 2019

Предположим, у меня есть этот набор данных:

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

Эта таблица будет иметь:

  • 3 для a, потому что есть 3 значения c для a, и c являетсясамая большая группа для
  • 4 для b, потому что есть 4 значения f для b, и f является самой большой группой для b

В идеале, я хотел бы пойтисделайте шаг вперед и вычислите процент того, что самая большая группа принадлежит целому типу.Итак (large_group_size / n ()).

1 Ответ

2 голосов
/ 12 мая 2019

в два 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

Возможно, есть более эффективный способ, но именно так я бы и сделал в спешке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...