Найти количество строк, используя dplyr/group_by
Я использую набор данных mtcars
. Я хочу найти количество записей для конкретной комбинации данных. Что-то очень похоже на предложение count(*)
group by в SQL. 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
Я нашел различные функции, чтобы перейти к 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()
работать для меня?
Ответы
Ответ 1
В 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
Ответ 2
Другой подход заключается в использовании двойных двоеточий:
mtcars %>%
dplyr::group_by(cyl, gear) %>%
dplyr::summarise(length(gear))
Ответ 3
Другая опция, необязательно более элегантная, но не требующая обращения к определенному столбцу:
mtcars %>%
group_by(cyl, gear) %>%
do(data.frame(nrow=nrow(.)))
Ответ 4
Я думаю, что вы ищете следующее.
cars_by_cylinders_gears <- mtcars %>%
group_by(cyl, gear) %>%
summarise(count = n())
Это использует пакет dplyr. По сути, это сокращенная версия решения count(), предоставляемого docendo discimus.