2013-09-18 4 views
2

Это является продолжением на этот вопрос, я спросил ранее: R for loop: create a new column with the count of a sub str from a different columnstrsplit в переменное число столбцов

У меня есть большой стол (100+ colums, 50k + строка). Один из столбцов содержат данные в следующем формате:

col 
chicken 
chicken,goat 
cow,chicken,goat 
cow 

Я хочу, чтобы добраться до:

col   col2   col3 
chicken 
chicken  goat 
cow   chicken  goat 
cow 

Есть много более 3 столбцов, которые должны быть заполнены, я просто раздел это вниз быть примером. Мой скрипт создает соответствующее количество столбцов для заполнения, мне просто нужен код, я предполагаю, что это цикл for, чтобы разделить строку в 'col' on ',', а затем поместить разделенные строки в последующие столбцы.

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

+2

'strsplit' на запятую, а затем' plyr :: rbind.fill'. – joran

ответ

11
read.table(text="chicken 
chicken,goat 
cow,chicken,goat 
cow", fill=TRUE, sep=",") 
# Trivial to change the names of dataframe columns 
     V1  V2 V3 
1 chicken    
2 chicken goat  
3  cow chicken goat 
4  cow  
+1

Это одно из многих компактных и элегантных решений проблем, которые я узнал от Gabor Grothendeick в списке рассылки R-help. Разрабатывая, почему его многочисленные работающие решения для вопросов регулярного выражения «работали», я узнал о том, как я узнал регулярные выражения. –

+0

Здесь я чувствую себя застрявшим в мысли: «О, ну, данные уже в R (урон сделан), давайте посмотрим, что мы можем сделать, чтобы очистить», вместо того, чтобы, как в вашем ответе, сделать один шаг назад и представить более про -активное решение. Круто. – Henrik

+0

Можно также взять вектор 'col1' и передать его в read.table (text = ...), а затем cbind() в исходный фрейм данных. –

3

Вы можете попробовать это:

library(splitstackshape) 
concat.split(data = df, split.col = 1, sep = ",", drop = TRUE) 

#  col_1 col_2 col_3 
# 1 chicken    
# 2 chicken goat  
# 3  cow chicken goat 
# 4  cow 
+0

К сожалению, я думаю, что их данные содержат несколько пустых строк, и я не учитывал это в версии «splitstackshape», которая находится на CRAN. – A5C1D2H2I1M1N2O1R2T1

+0

@ Ананда Махто, я действительно ждал две минуты, чтобы дать вам возможность сначала дать ответ. ;) – Henrik

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