0

首先,我看到了一个关于从篮子到单身的转换的帖子,但不是相反的,我看到了另一个类似的帖子,但从未得到回复。

我有这样的堆栈形式的数据:

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但那些没有用。

你如何从单身转变为篮子?

4

2 回答 2

1

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

aggregate(Product~ID, dd, paste)

(假设您的 data.frame 名为dd)。那会回来的

#   ID             Product
# 1  A        Prod1, Prod2
# 2  B Prod1, Prod2, Prod3
# 3  C               Prod1
于 2014-12-24T01:45:44.190 回答
1

从@MrFlick 停止的地方开始,如果你想将你的行转换为列,你可以这样做,但你需要先向你的数据添加一个“时间”变量。这很容易getanID从我的“splitstackshape”包中完成。

从那里,您可以使用您喜欢的方法从“长”数据集转到“宽”数据集。例如,这里我展示了如何使用reshape基础 R 和dcast.data.table“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          
于 2014-12-26T17:52:07.407 回答