查找使用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还提供了一个方便的count
function,完全相同的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(.)))