Encuentre el número de filas usando dplyr / group_by

Estoy usando el conjunto de datos mtcars . Quiero encontrar la cantidad de registros para una combinación particular de datos. Algo muy similar a la cláusula count(*) group by en SQL. ddply() de plyr me funciona

 library(plyr) ddply(mtcars, .(cyl,gear),nrow) 

tiene salida

  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 

Usando este código

 library(dplyr) g <- group_by(mtcars, cyl, gear) summarise(g, length(gear)) 

tiene salida

  length(cyl) 1 32 

Encontré varias funciones para summarise() pero ninguna parece funcionar para mí. Una función que encontré es sum(G) , que devolvió

 Error in eval(expr, envir, enclos) : object 'G' not found 

Intenté usar n() , que devolvió

 Error in n() : This function should not be called directly 

¿Qué estoy haciendo mal? ¿Cómo puedo hacer que group_by() / summarise() funcione para mí?

Hay una función especial n() en dplyr para contar filas (potencialmente dentro de grupos):

 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 

Pero dplyr también ofrece una práctica función de count que hace exactamente lo mismo con menos tipeo:

 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 

otro enfoque es usar los dos puntos dobles:

 mtcars %>% dplyr::group_by(cyl, gear) %>% dplyr::summarise(length(gear)) 

Otra opción, no necesariamente más elegante, pero no requiere hacer referencia a una columna específica:

 mtcars %>% group_by(cyl, gear) %>% do(data.frame(nrow=nrow(.)))