How to add secondary summary of previously grouped/summarized data for purposes of sorting in R with dplyr

Viewed 42

I am plotting two groups - before and after
Each group has 2 levels - up, down
For each level I have calculated the summary stat, count

I am trying to create new summary stat which is the total count of each level in the database, new_count

new_count will be used to order the levels when plotting

here is the original 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

here is the original output

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

here is what the final output should look like

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

my code

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

is it possible to do something like a nested summarize?

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

One possibility could be:

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

An option using 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
Related