una tres tabla subtotales sacar regla porcentajes porcentaje para los insertar dinĂ¡mica dinamica crear con como columnas calcular r group-by dplyr

tres - Encontrar el porcentaje en un subgrupo usando group_by y resumir



regla de tres (2)

Soy nuevo en dplyr y estoy tratando de hacer la siguiente transformación sin suerte. He buscado en Internet y he encontrado ejemplos para hacer lo mismo en ddply pero me gustaría usar dplyr.

Tengo los siguientes datos:

month type count 1 Feb-14 bbb 341 2 Feb-14 ccc 527 3 Feb-14 aaa 2674 4 Mar-14 bbb 811 5 Mar-14 ccc 1045 6 Mar-14 aaa 4417 7 Apr-14 bbb 1178 8 Apr-14 ccc 1192 9 Apr-14 aaa 4793 10 May-14 bbb 916 .. ... ... ...

Quiero usar dplyr para calcular el porcentaje de cada tipo (aaa, bbb, ccc) a nivel de mes, es decir

month type count per 1 Feb-14 bbb 341 9.6% 2 Feb-14 ccc 527 14.87% 3 Feb-14 aaa 2674 .. .. ... ... ...

He intentado

data %>% group_by(month, type) %>% summarise(count / sum(count))

Esto da un 1 como cada valor. ¿Cómo hago la suma (cuenta) suma para todos los tipos en el mes?


Tratar

library(dplyr) data %>% group_by(month) %>% mutate(countT= sum(count)) %>% group_by(type, add=TRUE) %>% mutate(per=paste0(round(100*count/countT,2),''%''))

También podríamos usar left_join después de resumir la sum(count) por ''mes''

O una opción usando data.table .

library(data.table) setkey(setDT(data), month)[data[, list(count=sum(count)), month], per:= paste0(round(100*count/i.count,2), ''%'')][]


Y con un poco menos de código:

df <- data.frame(month=c("Feb-14", "Feb-14", "Feb-14", "Mar-14", "Mar-14", "Mar-14", "Apr-14", "Apr-14", "Apr-14", "May-14"), type=c("bbb", "ccc", "aaa", "bbb", "ccc", "aaa", "bbb", "ccc", "aaa", "bbb"), count=c(341, 527, 2674, 811, 1045, 4417, 1178, 1192, 4793, 916)) library(dplyr) df %>% group_by(month) %>% mutate(per=paste0(round(count/sum(count)*100, 2), "%")) %>% ungroup

Dado que desea "dejar" su marco de datos intacto, no debe usar el summarise , la mutate será suficiente.