mutate - Encuentra el número de filas usando dplyr/group_by
filtrar data frame r (3)
Estoy usando el conjunto de datos mtcars
. Quiero encontrar el número de registros para una combinación particular de datos. Algo muy similar al count(*)
grupo por cláusula en SQL. ddply()
de plyr está trabajando para mí
library(plyr)
ddply(mtcars, .(cyl,gear),nrow)
tiene salida
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
Usando este codigo
library(dplyr)
g <- group_by(mtcars, cyl, gear)
summarise(g, length(gear))
tiene salida
length(cyl)
1 32
Encontré varias funciones para summarise()
pero ninguna parece funcionar para mí. Una función que encontré es la sum(G)
, que devolvió
Error in eval(expr, envir, enclos) : object ''G'' not found
Intentado utilizando n()
, que devolvió
Error in n() : This function should not be called directly
¿Qué estoy haciendo mal? ¿Cómo puedo hacer que group_by()
/ group_by()
funcione para mí?
Hay una función especial n()
en dplyr para contar filas (potencialmente dentro de grupos):
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
Pero dplyr también ofrece una útil función de count
que hace exactamente lo mismo con menos escritura:
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
Otra opción, no necesariamente más elegante, pero no requiere referirse a una columna específica:
mtcars %>%
group_by(cyl, gear) %>%
do(data.frame(nrow=nrow(.)))
otro enfoque es usar los dos puntos dobles:
mtcars %>%
dplyr::group_by(cyl, gear) %>%
dplyr::summarise(length(gear))