Ответ 1
У вас проблемы, потому что strsplit()
возвращает список, который нам нужно применить as.data.frame.list()
к каждому элементу, чтобы получить его в надлежащем формате, который требуется dplyr
. Даже тогда это все равно потребует немного больше работы для получения полезных результатов. Короче говоря, это не похоже на подходящую операцию для do()
.
Думаю, вам лучше использовать separate()
от tidyr
. Его можно легко использовать с функциями dplyr
и цепями. Не понятно, хотите ли вы сохранить первый столбец, так как ваш результат ldply
для df2
не имеет его, поэтому я его не отключил.
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
Вы также можете использовать cSplit
. Он также очень эффективен, поскольку он полагается на 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
Или более конкретно
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