转换表,其列表包含列表到long表

时间:2016-07-22 12:42:18

标签: r reshape2

我想转换我的data.frame 这个表格:

Day Fruits
Monday  Apple, Banana, Orange
Tuesday Apple, Banana
Thursday    Orange, Melone
Saturday    Apple
Sunday  Banana

到那个表格:

Day  Fruit
Monday  Apple
Monday  Banana
Monday  Orange
Tuesday Apple
Tuesday Banana
Thursday    Orange
Thursday    Melone
Saturday    Apple
Sunday  Banana

我不知道如何解决的部分是fruit专栏有一个不同项目的列表。

这是我的工作范例:

day <- c("Monday", "Tuesday", "Thursday", "Saturday", "Sunday")
fruits <- c("Apple, Banana, Orange", "Apple, Banana", "Orange, Melone", "Apple", "Banana")


df <- data.frame(day, fruits)
df

library(reshape2)
df[, c(2:4)] <- colsplit(df[, 2], ", ", c("fruit1", "fruit2", "fruit3"))
df
melt(df, id.vars="day")

我可以将Fruits列拆分为多个列,但问题是可能不仅仅有三个水果。我仍然没有按照我想要的那样将表格变成长格式。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以简单地使用包splitstackshape。它为您完成所有工作。 :-) cSplit 功能将连接数据拆分为单独的值。 你应该提到splitCols = "fruits",这是需要拆分的列。 comma在此处的每列中都用作分隔符。我们将所需的方向指定为"long",因为我们正在使用colum-wise

library(splitstackshape)

df2 <- cSplit(df, splitCols = "fruits", sep = ", ", direction = "long")

> df2
#        day fruits
#1:   Monday  Apple
#2:   Monday Banana
#3:   Monday Orange
#4:  Tuesday  Apple
#5:  Tuesday Banana
#6: Thursday Orange
#7: Thursday Melone
#8: Saturday  Apple
#9:   Sunday Banana