Trovare la percentuale in un sottogruppo usando group_by e riepilogare

Sono nuovo di dplyr e sto cercando di fare la seguente trasformazione senza fortuna. Ho cercato su internet e ho trovato esempi per fare lo stesso in ddply, ma mi piacerebbe usare dplyr.

Ho i seguenti dati:

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

Voglio usare dplyr per calcolare la percentuale di ogni tipo (aaa, bbb, ccc) ad un livello mese cioè

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

ho provato

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

Questo dà un 1 come valore. Come faccio a calcolare la sum (contare) su tutti i tipi del mese?

Provare

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

Potremmo anche usare left_join dopo aver riassunto la sum(count) per “mese”

O un’opzione che usa data.table .

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

E con un po ‘meno codice:

 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 

Dato che vuoi “lasciare” intatto il tuo frame di dati, non dovresti usare il summarise , il mutate sarà sufficiente.