Как добавить вторичную сводку ранее сгруппированных / обобщенных данных для сортировки в R с помощью dplyr

Я рисую две группы - до и после
Каждая группа имеет 2 уровня - вверх, вниз
Для каждого уровня я рассчитал итоговую статистику, count

Я пытаюсь создать новую сводную статистику, которая представляет собой общее количество каждого уровня в базе данных, new_count

new_count будет использоваться для упорядочивания уровней при построении

вот оригинальный df

group   level
before  up
before  up
before  up
before  up
before  down
before  down
before  down
before  down
before  down
before  down
before  down
before  down
after   up
after   up
after   up
after   up
after   up
after   up
after   down
after   down
after   down

вот исходный результат

group   level   count   
before  up      4       
before  down    8       
after   up      6       
after   down    3       

вот как должен выглядеть окончательный результат

group   level   count   new_count
before  up      4       10
before  down    8       11
after   up      6       10
after   down    3       11

мой код

df %>% group_by(group, level) %>% summarize(count = n())

можно ли сделать что-то вроде вложенного резюмирования?

df %>% group_by(group, level) %>% 
           summarize(count = n(),
                     new_count = group_by(level) %>%
                                 summarize(new_count = n()))

person E50M    schedule 04.06.2019    source источник
comment
Может df %>% group_by(group, level) %>% summarise(count = n()) %>% group_by(level) %>% mutate(count = sum(count))?   -  person Ronak Shah    schedule 04.06.2019
comment
спасибо - изменено на new_count, это сработало df% ›% group_by (group, level)%›% summarize (count = n ())% ›% group_by (level)%›% mutate (new_count = sum (count))   -  person E50M    schedule 04.06.2019


Ответы (2)


Одна возможность может быть:

df %>%
 add_count(level) %>%
 group_by(group, level) %>%
 summarise(count = n(),
           new_count = first(n))

  group  level count new_count
  <chr>  <chr> <int>     <int>
1 after  down      3        11
2 after  up        6        10
3 before down      8        11
4 before up        4        10
person tmfmnk    schedule 04.06.2019

Вариант с использованием data.table

library(data.table)
setDT(df1)[, n := .N, level][, .(count = .N, new_count = first(n)), .(group, level)]
#    group level count new_count
#1: before    up     4        10
#2: before  down     8        11
#3:  after    up     6        10
#4:  after  down     3        11
person akrun    schedule 04.06.2019