使用dplyr按组计算行数

使用dplyr按组计算行数,r,dplyr,count,plyr,R,Dplyr,Count,Plyr,我使用的是mtcars数据集。我想找到特定数据组合的记录数。类似于SQL中的count(*)groupby子句ddply()为我工作 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 len

我使用的是
mtcars
数据集。我想找到特定数据组合的记录数。类似于SQL中的
count(*)
groupby子句ddply()为我工作

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
  length(cyl)
1          32
使用此代码

library(dplyr)
g <- group_by(mtcars, cyl, gear)
summarise(g, length(gear))
我找到了各种可以传递给
summary()
的函数,但似乎没有一个适合我。我找到的一个函数是
sum(G)
,它返回

Error in eval(expr, envir, enclos) : object 'G' not found
尝试使用
n()
,返回

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

我做错了什么?如何让
groupby()
/
summary()
为我工作?

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

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

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

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

另一个选项,不一定更优雅,但不需要参考特定列:

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

另一个选项,不一定更优雅,但不需要参考特定列:

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

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

但dplyr还提供了一个方便的
count
功能,该功能与较少的键入操作完全相同:

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

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

但dplyr还提供了一个方便的
count
功能,该功能与较少的键入操作完全相同:

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

我想你要找的东西如下

cars_by_cylinders_gears <- mtcars %>%
  group_by(cyl, gear) %>%
  summarise(count = n())
cars\u by\u气缸\u齿轮%
组别(气缸,档位)%>%
总结(计数=n()

这是使用dplyr包。这本质上是docendo discimus提供的count()解决方案的直接版本

我想你要找的是以下内容

cars_by_cylinders_gears <- mtcars %>%
  group_by(cyl, gear) %>%
  summarise(count = n())
cars\u by\u气缸\u齿轮%
组别(气缸,档位)%>%
总结(计数=n()

这是使用dplyr包。这本质上是docendo discimus提供的count()解决方案的直接版本

我不能复制这个。我得到的输出与
ddply
相同。您使用的是什么版本的dplyr?尝试更新?我有最新版本0.1.3。你有0.1.2吗?没有。你的例子在0.1.3中对我来说很好。你有什么版本的R?这会导致行为上的差异吗?我也在家里的一台使用Ubuntu的电脑上试过这个,同样的东西…谢谢!!!这就解决了问题。如果我同时附上了plyr和dplyr软件包,总结就不能像预期的那样工作。一旦我重新启动会话(默认情况下没有附加所有正常的包),我就能够让它工作了。呸,我不能复制这个。我得到的输出与
ddply
相同。您使用的是什么版本的dplyr?尝试更新?我有最新版本0.1.3。你有0.1.2吗?没有。你的例子在0.1.3中对我来说很好。你有什么版本的R?这会导致行为上的差异吗?我也在家里的一台使用Ubuntu的电脑上试过这个,同样的东西…谢谢!!!这就解决了问题。如果我同时附上了plyr和dplyr软件包,总结就不能像预期的那样工作。一旦我重新启动会话(默认情况下没有附加所有正常的包),我就能够让它工作了。这只是给你数据集的
nrow
,而不是给你数据集的
nrow
,而不是给我的组。关键的一点是,我不需要在列名周围指定引号来分组。关键的部分不是指定要分组的列名周围的引号。