将具有列表列的 table 转换为长 table

transform table that has a column with a list into long table

我想将我的 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

我不知道如何解决的部分是水果列有不同项目的列表。

这是我的工作示例:

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 列拆分为多个列,但问题是可能不止三个水果。而且我仍然没有像我想要的那样用 melt 将 table 变成长格式。

感谢帮助!

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

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