How to strsplit different number of strings in certain column by do function
You're having troubles because strsplit()
returns a list which we then need to apply as.data.frame.list()
to each element to get it into the proper format that dplyr
requires. Even then it would still require a bit more work to get usable results. Long story short, it doesn't seem like a suitable operation for do()
.
I think you might be better off using separate()
from tidyr
. It can easily be used with dplyr
functions and chains. It's not clear whether you want to keep the first column since your ldply
result for df2
does not have it, so I left it off.
library(tidyr)
separate(df[-1], name, 1:3, " ", extra = "merge")
# 1 2 3
# 1 jake <NA> <NA>
# 2 jane jane <NA>
# 3 john john john
You could also use cSplit
. It is also very efficient since it relies on 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
Or more specifically
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