2016-07-22 11 views
0

長いテーブルにリストの列を持つテーブルを変換:そのフォームに私は私の<code>data.frame</code> からこの形式変換したい

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列を分割することができますが、事は、わずか3果物よりも多くがあるかもしれないということです。そして、私はそれがしたいと思うように、まだテーブルを融けた長いフォーマットにしません。

ありがとうございました!

答えて

1

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 
関連する問題