Quiero calcular la frecuencia relativa por grupos.

Este es mi conjunto de datos:

CATEGOTY   VALUE  COUNT
AAA        1      230
AAA        0      150
BBB        1      155
BBB        0      320

El resultado esperado es este, donde PROC se obtiene dividiendo COUNT por la suma de VALUE==0 y VALUE==1 por grupo:

CATEGOTY   VALUE  COUNT   PROC
AAA        1      230     0.60
AAA        0      150     0.40
BBB        1      155     0.33
BBB        0      320     0.67

De hecho, recibí el primer conjunto de datos agrupado usando este código:

set = df %>%
  group_by(CATEGORY,VALUE) %>%
  summarise(COUNT = n())

Entonces, quiero saber cómo ajustar este código para obtener una columna más PROC.

r
2
Dutyfree 14 dic. 2016 a las 22:50

2 respuestas

La mejor respuesta

Con base R:

df$PROC <- round(ave(df$COUNT, df$CATEGOTY, FUN=function(x)x/sum(x)),3)
df
#  CATEGOTY VALUE COUNT  PROC
#1      AAA     1   230 0.605
#2      AAA     0   150 0.395
#3      BBB     1   155 0.326
#4      BBB     0   320 0.674
0
Sandipan Dey 14 dic. 2016 a las 22:01
library(dplyr)
df %>% group_by(CATEGOTY) %>% mutate(PROC = round(COUNT/sum(COUNT),1))

#  CATEGOTY VALUE COUNT  PROC
#     <chr> <int> <int> <dbl>
#1      AAA     1   230   0.6
#2      AAA     0   150   0.4
#3      BBB     1   155   0.3
#4      BBB     0   320   0.7
2
joel.wilson 14 dic. 2016 a las 20:06