Estoy usando el mtcars
conjunto de datos. Quiero encontrar el número de registros para una combinación particular de datos. Algo muy parecido a la count(*)
cláusula group by en SQL. ddply()
de plyr está funcionando 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 código
library(dplyr)
g <- group_by(mtcars, cyl, gear)
summarise(g, length(gear))
tiene salida
length(cyl)
1 32
Encontré varias funciones para pasar, summarise()
pero ninguna parece funcionar para mí. Una función que encontré es sum(G)
, que devolvió
Error in eval(expr, envir, enclos) : object 'G' not found
Intenté usar n()
, que volvió
Error in n() : This function should not be called directly
¿Qué estoy haciendo mal? ¿Cómo puedo conseguir group_by()
/ summarise()
trabajar para mí?
ddply
. ¿En qué versión de dplyr estás? ¿Intenta actualizar?Respuestas:
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 práctica
count
función 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
fuente
otro enfoque es usar dos puntos dobles:
fuente
Creo que lo que buscas es lo siguiente.
Esto está usando el paquete dplyr. Esta es esencialmente la versión de mano de la solución count () proporcionada por docendo discimus.
fuente
Otra opción, no necesariamente más elegante, pero que no requiere hacer referencia a una columna específica:
fuente
nrow
del conjunto de datos, no del grupo