查找使用dplyr / group_by的行数

我正在使用mtcars数据集。 我想查找特定数据组合的logging数。 与SQL中的count(*) group by子句非常相似。 ddply()来自plyr正在为我工​​作

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

有输出

  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 

使用这个代码

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

有输出

  length(cyl) 1 32 

我发现各种function通过summarise()但似乎没有为我工作。 我find的一个函数是sum(G) ,它返回

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

尝试使用n() ,返回

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

我究竟做错了什么? 我怎么能得到group_by() / summarise()为我工作?

在dplyr中有一个特殊的函数n()来计算行(可能在组内):

 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 

但dplyr还提供了一个方便的countfunction,完全相同的input较less:

 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 

另一种方法是使用双冒号:

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

另一种select,并不要求更优雅,但不需要引用特定的列:

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