将列值转换为R中的各个列

时间:2016-04-04 06:29:09

标签: r text dataframe

数据框有点像这样

 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

感激地收到任何提示。

2 个答案:

答案 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