首先,我看到了从一个篮子到一个单一的转换,但没有反过来,我看到了另一个类似的帖子,从未回答。
我有堆栈形式的数据,如下所示:
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
,但这些都没有用。
你如何从单身转换成篮子?
答案 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