我正在使用mtcars
数据集。我想找到特定数据组合的记录数。与SQL中的count(*)
group by子句非常相似的东西。来自 plyr 的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
使用此代码
library(dplyr)
g <- group_by(mtcars, cyl, gear)
summarise(g, length(gear))
有输出
length(cyl)
1 32
我找到了传递给summarise()
的各种函数,但似乎没有一个对我有用。我找到的一个函数是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()
为我工作?
答案 0 :(得分:97)
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
函数,它可以更少地输入:
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
答案 1 :(得分:14)
另一种方法是使用双冒号:
mtcars %>%
dplyr::group_by(cyl, gear) %>%
dplyr::summarise(length(gear))
答案 2 :(得分:3)
另一种选择,不一定更优雅,但不需要引用特定列:
var vm = this;
AuthService.login(user.name,user.password).then(function() {
$state.go('dashboard');
},function(error) {
vm.user.password = '';
ngDialog.open({
template: '<h2>Error</h2><p>{{error}}</p>',
plain: true
});
})
答案 3 :(得分:1)
我认为您正在寻找的东西如下。
cars_by_cylinders_gears <- mtcars %>%
group_by(cyl, gear) %>%
summarise(count = n())
这是使用dplyr软件包。这本质上是docendo discimus提供的count()解决方案的简化版本。