2016-07-22 12 views
0

Я хочу, чтобы превратить мой 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 столбец на несколько столбцов, но дело в том, что там может быть больше, чем просто три фруктов. И я до сих пор не получаю таблицу в длинном формате с расплавом, как я хочу.

Спасибо за помощь!

ответ

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 

 Смежные вопросы

  • Нет связанных вопросов^_^