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:

Respuestas a la pregunta(5)

Su respuesta a la pregunta