2016-07-22 17 views
0

I hat:Tabelle umwandeln, die eine Spalte mit einer Liste in langen Tisch meines <code>data.frame</code> von diese Form will verwandeln

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

zu dieser Form:

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

Der Teil mir nicht wissen, wie zu lösen ist, dass die Früchte Spalte eine Liste der verschiedenen Elemente hat.

Das ist mein Arbeitsbeispiel:

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

Ich kann die Fruits Spalte in mehrere Spalten aufgeteilt, aber die Sache ist, dass es mehr als nur drei Früchte sein könnte. Und ich bekomme den Tisch immer noch nicht in ein langes Format mit Schmelze, wie ich es möchte.

Vielen Dank für Ihre Hilfe!

Antwort

1

Sie können einfach das Paket splatshackshape verwenden. Es macht die ganze Arbeit für dich. :-) Die Funktion cSplit teilt verkettete Daten in separate Werte auf. sollten Sie splitCols = "fruits" erwähnen, welches die Spalte ist, die geteilt werden muss. Die comma dient als Trennzeichen innerhalb jeder Spalte hier. und wir spezifizieren die gewünschte Richtung als "long", weil wir column-weise arbeiten

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