数据框有点像这样
X Y
1 Fruit Apple, Banana, Orange
2 Vegetable Cauliflower, Potato, Brinjal
3 Cuisine Thai, Indian, Japanese
4 Fruit Grape, Watermelon, Papaya
5 Vegetable Pumkin, Cabbage, Broccoli
6 Cuisine Mexican, English, Chinese
我希望它转变成这样的东西
Fruit Vegetable Cuisine
1 Apple, Banana, Orange Cauliflower, Potato, Brinjal Thai, Indian, Japanese
2 Grape, Watermelon, Papaya Pumkin, Cabbage, Broccoli Mexican, English, Chinese
感激地收到任何提示。
答案 0 :(得分:4)
如果每个类别中的项目数不相同,这将为您提供一个列表而不是数据框,
unstack(df, Y ~ x)
# Cuisine Fruit Vegetable
#1 Thai, Indian, Japanese Apple, Banana, Orange Cauliflower, Potato, Brinjal
#2 Mexican, English, Chinese Grape, Watermelon, Papaya Pumkin, Cabbage, Broccoli
答案 1 :(得分:2)
我们创建一个序列列,然后使用dcast
library(data.table)
setDT(df1)[, Seq := seq_len(.N), X]
dcast(df1, Seq~X, value.var="Y")[, Seq := NULL][]
# Cuisine Fruit Vegetable
#1: Thai, Indian, Japanese Apple, Banana, Orange Cauliflower, Potato, Brinjal
#2: Mexican, English, Chinese Grape, Watermelon, Papaya Pumkin, Cabbage, Broccoli
如果我们使用data.table
的开发版本,则更直接,更高效
dcast(setDT(df1), rowid(X)~ X, value.var="Y")
或使用base R
data.frame(split(df1$Y, df1$X))
# Cuisine Fruit
#1 Thai, Indian, Japanese Apple, Banana, Orange
#2 Mexican, English, Chinese Grape, Watermelon, Papaya
# Vegetable
#1 Cauliflower, Potato, Brinjal
#2 Pumkin, Cabbage, Broccoli