2016-07-22 2 views
0

Je veux transformer mon data.frame de cette forme:transformer table qui a une colonne avec une liste longue table dans

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

à cette forme:

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

La partie que je ne suis pas savoir comment résoudre est que la colonne des fruits a une liste de différents articles.

Ceci est mon exemple de travail:

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") 

je peux diviser la colonne Fruits en plusieurs colonnes, mais la chose est qu'il pourrait y avoir plus que trois fruits. Et je n'ai toujours pas la table en format long avec la fonte comme je le veux.

Merci pour votre aide!

Répondre

1

Vous pouvez simplement utiliser le package splitstackshape. Il fait tout le travail pour vous. :-) La fonction cSplit divise les données concaténées en valeurs séparées. vous devez mentionner splitCols = "fruits" qui est la colonne qui doit être divisée. Le comma sert de délimiteur dans chaque colonne ici. et nous spécifions la direction désirée comme "long" parce que nous travaillons 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