2017-02-22 14 views
-1

У меня есть кадр данных, где один из столбцов - это список. Я хотел бы, чтобы бросить его в целый кадр данных:преобразовать кадр данных с столбцом списка типов в плоский фрейм данных

df=data.frame(col1=c(LETTERS[1:3]),col2=c('X,Y,Z','W,V','U')) 
> df 
    col1 col2 
1 A X,Y,Z 
2 B W,V 
3 C  U 
> 

И хочу сделать еще dataframe для удобства просмотра и дальнейшей обработки, такие как:

> data.frame(col1=c('A','A','A','B','B','C'),col2=LETTERS[26:21]) 
    col1 col2 
1 A Z 
2 A Y 
3 A X 
4 B W 
5 B V 
6 C U 
> 

Число значений в col2 варьируются от От 1 до 5 в моем реальном наборе данных. В настоящее время я пытался

library(stringr) 
> str_split(df[,2],',') 
[[1]] 
[1] "X" "Y" "Z" 

[[2]] 
[1] "W" "V" 

[[3]] 
[1] "U" 

и

> unlist(str_split(df[,2],',')) 
[1] "X" "Y" "Z" "W" "V" "U" 

Но я не уверен, как действовать, чтобы связать каждый Col2 значение с его правильной col1 значение

+0

Также [Разделить строки с разделителями в столбце и вставить как новые строки] (http://stackoverflow.com/questions/1 5347282/split-delimited-strings-in-a-column-and-insert-as-new-rows) –

ответ

0

Мы можем сделать это с помощью base R

stack(setNames(strsplit(as.character(df$col2), ","), df$col1)) 
+1

Почему бы вам не указать его на цель обмана? –

+1

Или добавьте ссылку на аналогичный ответ (http://stackoverflow.com/a/37130811/3521006) –

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