tomaz
tomaz

Reputation: 522

Adding group size to summary table no longer works

I am aggregating some data and I want to add group sizes N to the output table. Until recently, the code below worked fine. Now, N is equal to the rowcount of my table.

iris %>% 
  group_by(Species) %>% 
  group_by(N = n(), .add = TRUE) %>% 
  summarise_all(list(~mean(., na.rm = TRUE))) 

# A tibble: 3 x 6
# Groups:   Species [3]
  Species        N Sepal.Length Sepal.Width Petal.Length Petal.Width
  <fct>      <int>        <dbl>       <dbl>        <dbl>       <dbl>
1 setosa       150         5.01        3.43         1.46       0.246
2 versicolor   150         5.94        2.77         4.26       1.33 
3 virginica    150         6.59        2.97         5.55       2.03 

Upvotes: 1

Views: 42

Answers (2)

TarJae
TarJae

Reputation: 78937

Try this:

rm(list = ls())
library(dplyr)
iris %>% 
  group_by(Species) %>% 
  group_by(N = n(), .add = TRUE) %>% 
  summarise_all(list(~mean(., na.rm = TRUE))) 

Upvotes: 0

Ronak Shah
Ronak Shah

Reputation: 388982

This looks like a recently introduced bug. Can be reproduced on dplyr 1.0.3 but not on 1.0.2.

You could however, avoid the second group_by completely in this case.

library(dplyr)

iris %>% 
  group_by(Species) %>% 
  summarise(across(.fns = mean, na.rm = TRUE), 
            N = n())

# Species    Sepal.Length Sepal.Width Petal.Length Petal.Width     N
#* <fct>             <dbl>       <dbl>        <dbl>       <dbl> <int>
#1 setosa             5.01        3.43         1.46       0.246    50
#2 versicolor         5.94        2.77         4.26       1.33     50
#3 virginica          6.59        2.97         5.55       2.03     50

Upvotes: 3

Related Questions