从单个/堆栈转换为篮子

时间:2014-12-24 01:31:19

标签: r market-basket-analysis

首先,我看到了从一个篮子到一个单一的转换,但没有反过来,我看到了另一个类似的帖子,从未回答。

我有堆栈形式的数据,如下所示:

ID  Product
A    Prod1
A    Prod2
B    Prod1
B    Prod2
B    Prod3
C    Prod1

我需要它看起来像这样:

ID   Products
A    Prod1, Prod2
B    Prod1, Prod2, Prod3
C    Prod1

我尝试了unstack然后unlist,但这些都没有用。

你如何从单身转换成篮子?

2 个答案:

答案 0 :(得分:1)

如果您只想折叠成字符串,请尝试

aggregate(Product~ID, dd, paste)

(假设您的data.frame名为dd)。那将返回

#   ID             Product
# 1  A        Prod1, Prod2
# 2  B Prod1, Prod2, Prod3
# 3  C               Prod1

答案 1 :(得分:1)

在@MrFlick停止的地方拾取,如果要将行转换为列,则可以这样做,但是您需要先为数据添加“时间”变量。使用我的“splitstackshape”包中的getanID可以轻松完成此操作。

从那里,您可以使用首选方法从“长”数据集转到“宽”数据集。例如,我在这里展示了如何使用基础R中的reshape函数和“data.table”包中的dcast.data.table

library(splitstackshape)
reshape(getanID(mydf, "ID"), direction = "wide", idvar = "ID", timevar = ".id")
#    ID Product.1 Product.2 Product.3
# 1:  A     Prod1     Prod2        NA
# 2:  B     Prod1     Prod2     Prod3
# 3:  C     Prod1        NA        NA
dcast.data.table(getanID(mydf, "ID"), ID ~ .id, value.var = "Product", fill = "")
#    ID     1     2     3
# 1:  A Prod1 Prod2      
# 2:  B Prod1 Prod2 Prod3
# 3:  C Prod1