将具有列表列的 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
我想将我的 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