我正在尝试用R进行Market Basket Analysis并遇到问题。我使用.csv文件,其中有两列“Product”和“Customer”。购买不同产品时,客户编号重复多次。该表看起来像:
Product Customer
114 1
112 2
112 1
113 4
115 3
113 2
111 2
113 3
我需要这样做:(两栏:客户,产品。对于每个客户,他在一个单元中购买的所有产品)。
客户产品
1 114, 112
2 112, 113, 111
3 115, 113
4 113
我该怎么办?
任何帮助都会很棒!
答案 0 :(得分:0)
您可以使用aggregate
(df
包含原始数据框):
aggregate(Product~Customer, df, paste, sep = ", ")
# Customer Product
# 1 1 114, 112
# 2 2 112, 113, 111
# 3 3 115, 113
# 4 4 113
或dcast
取决于您希望输出显示的内容:
library(reshape2)
dcast(transform(df, count = 1), Customer~Product, fill = 0)
# Customer 111 112 113 114 115
# 1 1 0 1 0 1 0
# 2 2 1 1 1 0 0
# 3 3 0 0 1 0 1
# 4 4 0 0 1 0 0
答案 1 :(得分:0)
如果您的数据是
Product <- c(114,112,112,113,115,113,111,113)
Customer <- c(1,2,1,4,3,2,2,3)
df <- data.frame(Product,Customer)
您可以使用tapply
(不使用&gt;)
> tapply(df$Product,df$Customer,list)
$`1`
[1] 114 112
$`2`
[1] 112 113 111
$`3`
[1] 115 113
$`4`
[1] 113