Count number of rows by group using dplyr

count, dplyr, plyr, r

Solution

There's a special function `n()` in dplyr to count rows (potentially within groups):

library(dplyr)
mtcars %>% 
  group_by(cyl, gear) %>% 
  summarise(n = n())
#Source: local data frame [8 x 3]
#Groups: cyl [?]
#
#    cyl  gear     n
#  (dbl) (dbl) (int)
#1     4     3     1
#2     4     4     8
#3     4     5     2
#4     6     3     2
#5     6     4     4
#6     6     5     1
#7     8     3    12
#8     8     5     2

But dplyr also offers a handy `count` function which does exactly the same with less typing:

count(mtcars, cyl, gear)          # or mtcars %>% count(cyl, gear)
#Source: local data frame [8 x 3]
#Groups: cyl [?]
#
#    cyl  gear     n
#  (dbl) (dbl) (int)
#1     4     3     1
#2     4     4     8
#3     4     5     2
#4     6     3     2
#5     6     4     4
#6     6     5     1
#7     8     3    12
#8     8     5     2

Problem

I am using the `mtcars` dataset. I want to find the number of records for a particular combination of data. Something very similar to the `count(*)` group by clause in SQL. `ddply()` from plyr is working for me ``` library(plyr) ddply(mtcars, .(cyl,gear),nrow) ``` has output ``` cyl gear V1 1 4 3 1 2 4 4 8 3 4 5 2 4 6 3 2 5 6 4 4 6 6 5 1 7 8 3 12 8 8 5 2 ``` Using this code ``` library(dplyr) g <- group_by(mtcars, cyl, gear) summarise(g, length(gear)) ``` has output ``` length(cyl) 1 32 ``` I found various functions to pass in to `summarise()` but none seem to work for me. One function I found is `sum(G)`, which returned ``` Error in eval(expr, envir, enclos) : object 'G' not found ``` Tried using `n()`, which returned ``` Error in n() : This function should not be called directly ``` What am I doing wrong? How can I get `group_by()` / `summarise()` to work for me?

Original source