Agrupando y contando para obtener una tasa de cierre
Quiero contar porcountry
la cantidad de veces questatus
esopen
y la cantidad de veces questatus
esclosed
. Luego calcule elcloserate
porcountry
.
Datos:
customer <- c(1,2,3,4,5,6,7,8,9)
country <- c('BE', 'NL', 'NL','NL','BE','NL','BE','BE','NL')
closeday <- c('2017-08-23', '2017-08-05', '2017-08-22', '2017-08-26',
'2017-08-25', '2017-08-13', '2017-08-30', '2017-08-05', '2017-08-23')
closeday <- as.Date(closeday)
df <- data.frame(customer,country,closeday)
Agregandostatus
:
df$status <- ifelse(df$closeday < '2017-08-20', 'open', 'closed')
customer country closeday status
1 1 BE 2017-08-23 closed
2 2 NL 2017-08-05 open
3 3 NL 2017-08-22 closed
4 4 NL 2017-08-26 closed
5 5 BE 2017-08-25 closed
6 6 NL 2017-08-13 open
7 7 BE 2017-08-30 closed
8 8 BE 2017-08-05 open
9 9 NL 2017-08-23 closed
Cálculocloserate
closerate <- length(which(df$status == 'closed')) /
(length(which(df$status == 'closed')) + length(which(df$status == 'open')))
[1] 0.6666667
Obviamente, este es elcloserate
por el total. El desafío es conseguir elcloserate
porcountry
. Traté de agregar elcloserate
cálculo adf
por:
df$closerate <- length(which(df$status == 'closed')) /
(length(which(df$status == 'closed')) + length(which(df$status == 'open')))
Pero le da a todas las líneas uncloserate
de 0.66 porque no estoy agrupando. Creo que no debería usar la función de longitud porque el recuento se puede hacer agrupando. Leí alguna información sobre el usodplyr
para contar salidas lógicas por grupo pero esto no funcionó.
Este es el resultado deseado: