【发布时间】:2017-09-06 20:05:58
【问题描述】:
我想根据country 计算status 是open 的次数以及status 是closed 的次数。然后根据country 计算closerate。
数据:
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 的总数。挑战在于通过country 获得closerate。我尝试通过以下方式将closerate 计算添加到df:
df$closerate <- length(which(df$status == 'closed')) /
(length(which(df$status == 'closed')) + length(which(df$status == 'open')))
但它为所有行提供了 0.66 的 closerate,因为我没有分组。我相信我不应该使用长度函数,因为计数可以通过分组来完成。我阅读了一些关于使用dplyr 计算每个组的逻辑输出的信息,但这并没有成功。
这是所需的输出:
【问题讨论】:
标签: r dataframe grouping counting