Cómo dividir strsplit diferentes números de cadenas en cierta columna por función

Tengo un problema con el valor de columna dividida cuando el elemento de la columna tiene una cantidad diferente de cadenas. Puedo hacerlo en plyr por ejemplo:

library(plyr) column <- c("jake", "jane jane","john john john") df <- data.frame(1:3, name = column) df$name <- as.character(df$name) df2 <- ldply(strsplit(df$name, " "), rbind) View(df2) 

Como resultado, tenemos un dataframe con el número de columna relacionado con el número máximo de picaduras en un elemento dado.

Cuando bash hacerlo en dplyr, utilizo do function:

 library(dplyr) df2 % do(data.frame(strsplit(.$name, " "))) 

pero me sale un error:

 Error in data.frame("jake", c("jane", "jane"), c("john", "john", "john" : arguments imply differing number of rows: 1, 2, 3 

Me parece que debería usarse la función rbind , pero no sé dónde.

Estás teniendo problemas porque strsplit() devuelve una lista que luego debemos aplicar as.data.frame.list() a cada elemento para que tenga el formato adecuado que dplyr requiere. Incluso entonces, aún requeriría un poco más de trabajo para obtener resultados utilizables. Para resumir, no parece una operación adecuada para do() .

Creo que será mejor que tidyr separate() de tidyr . Se puede usar fácilmente con dplyr funciones y cadenas dplyr . No está claro si desea conservar la primera columna, ya que su resultado de ldply para df2 no lo tiene, por lo que lo dejé.

 library(tidyr) separate(df[-1], name, 1:3, " ", extra = "merge") # 1 2 3 # 1 jake   # 2 jane jane  # 3 john john john 

También cSplit usar cSplit . También es muy eficiente ya que depende de data.table

 library(splitstackshape) cSplit(df[-1], "name", " ") # name_1 name_2 name_3 # 1: jake NA NA # 2: jane jane NA # 3: john john john 

O más específicamente

 setnames(df2 < - cSplit(df[-1], "name", " "), names(df2), as.character(1:3)) df2 # 1 2 3 # 1: jake NA NA # 2: jane jane NA # 3: john john john