В качестве альтернативы, с

у рассчитывать наcountry количество разstatus являетсяopen и количество разstatus являетсяclosed, Затем рассчитайтеcloserate вcountry.

Данные:

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)

Добавлениеstatus:

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

расчетcloserate

closerate <- length(which(df$status == 'closed')) / 
(length(which(df$status == 'closed')) + length(which(df$status == 'open')))

[1] 0.6666667

Очевидно, этоcloserate для всего. Задача состоит в том, чтобы получитьcloserate вcountry, Я пытался добавитьcloserate расчет вdf по:

df$closerate <- length(which(df$status == 'closed')) / 
(length(which(df$status == 'closed')) + length(which(df$status == 'open')))

Но это дает всем линиямcloserate 0,66, потому что я не группируюсь. Я считаю, что я не должен использовать функцию длины, потому что подсчет может быть сделан путем группировки. Я прочитал некоторую информацию об использованииdplyr рассчитывать логические результаты на группу, но это не сработало.

Это желаемый результат:

Ответы на вопрос(5)

Ваш ответ на вопрос