A la hora de sumarizar datos con dplyr podemos calcular porcentajes dentro de grupos o subgrupos con transmute
. La sintaxis es sencilla pero tiene la peculiaridad que sólo obtendremos como salida lo que indiquemos en transmute. Mejor lo entendéis en un ejemplo:
Conjunto de datos aleatorio de ejemplo:
library(dplyr) observaciones = 100 grupo_1 = rpois(observaciones, 0.5) grupo_2 = rpois(observaciones, 1) df = cbind.data.frame(grupo_1, grupo_2) %>% mutate(id_cliente=n())
Sumarizamos por grupos:
df %>% group_by(grupo_1, grupo_2) %>% summarise(clientes = n())
Contamos clientes y calculamos el porcentaje sobre el total:
df %>% group_by(grupo_1, grupo_2) %>% summarise(clientes = n(), pct_total = n()/nrow(df))
Suelo usar nrow
se aceptan sugencias. Calculamos el porcentaje para el subgrupo del grupo_1, primer ejemplo de uso de transmute:
df %>% group_by(grupo_1, grupo_2) %>% summarise(clientes = n()) %>% transmute(grupo_2, pct_grupo = clientes/sum(clientes))
Vemos que clientes ha desaparecido, sólo obtenemos grupo_1, grupo_2 y pct_grupo. Si queremos el porcentaje sobre el total:
df %>% group_by(grupo_1, grupo_2) %>% summarise(clientes = n()) %>% transmute(grupo_2, pct_grupo = clientes/sum(clientes), pct_total = clientes/nrow(df))
Aquí lo tengo todo recogido, para cuando no lo recuerde. Saludos.