usar mutate funcion filtrar datos data como comando cheatsheet casos agrupar r dplyr plyr

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))