【发布时间】:2016-11-21 13:02:54
【问题描述】:
我希望这个复杂的标题是有意义的,但我遇到的问题并不容易理解。
玩具数据集列出了客户访问以及客户豁免状态和访问类型:
df <- structure(list(Customer = structure(c(8L, 2L, 5L, 4L, 4L, 1L,
1L, 6L, 6L, 7L, 7L, 7L, 3L, 3L, 3L), .Label = c("Aaron", "Elizabeth",
"Frank", "John", "Mary", "Pam", "Rob", "Sam"), class = "factor"),
Exemption = structure(c(2L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L,
2L, 2L, 2L, 1L, 1L, 1L), .Label = c("Exempt", "Non-exempt"
), class = "factor"), Type = structure(c(1L, 1L, 2L, 1L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L), .Label = c("Type 1",
"Type 2"), class = "factor")), .Names = c("Customer", "Exemption",
"Type"), class = "data.frame", row.names = c(NA, -15L))
Customer Exemption Type
1 Sam Non-exempt Type 1
2 Elizabeth Exempt Type 1
3 Mary Exempt Type 2
4 John Non-exempt Type 1
5 John Non-exempt Type 2
6 Aaron Non-exempt Type 2
7 Aaron Non-exempt Type 2
8 Pam Exempt Type 2
9 Pam Exempt Type 2
10 Rob Non-exempt Type 2
11 Rob Non-exempt Type 2
12 Rob Non-exempt Type 1
13 Frank Exempt Type 1
14 Frank Exempt Type 1
15 Frank Exempt Type 2
我想先按客户的访问次数对客户进行分类,然后在其中计算Type1/2访问的比例,也许还可以按豁免状态细分结果,例如输出如下所示:
Number_of_visits Exemption Type Proportion
1 1 Non-exempt Type 1 1.00
2 1 Non-exempt Type 2 0.00
3 1 Exempt Type 1 0.50
4 1 Exempt Type 2 0.50
5 2 Non-exempt Type 1 0.25
6 2 Non-exempt Type 2 0.75
7 2 Exempt Type 1 0.00
8 2 Exempt Type 2 1.00
9 3 Non-exempt Type 1 0.33
10 3 Non-exempt Type 2 0.67
11 3 Exempt Type 1 0.67
12 3 Exempt Type 2 0.33
我使用dplyr 尝试了group_by(Customer, Type) %>% summarise(n()) 的一些操作,但似乎不正确。
【问题讨论】:
-
Customer在预期输出中的位置在哪里? -
@mtoto:在预期的输出中,Number_of_visits 将客户折叠为计数,例如当
Number_of_visits = 1时,这对应于列表中的三个客户(Sam、Elizabeth、Mary)。其中之一是非豁免和类型 1,因此对应Proportion = 1。另外两个是豁免的,一个是类型 1,一个是类型 2,所以比例都是 0.5。
标签: r dplyr data-manipulation