Добавление нескольких столбцов в вызов dplyr mutate

У меня есть фрейм данных с разделенным точкой символом столбца:

> set.seed(310366)
> tst = data.frame(x=1:10,y=paste(sample(c("FOO","BAR","BAZ"),10,TRUE),".",sample(c("foo","bar","baz"),10,TRUE),sep=""))
> tst
    x       y
1   1 BAR.baz
2   2 FOO.foo
3   3 BAZ.baz
4   4 BAZ.foo
5   5 BAZ.bar
6   6 FOO.baz
7   7 BAR.bar
8   8 BAZ.baz

и я хочу разделить этот столбец на два новых столбца, содержащих части по обе стороны от точки.str_split_fixed из пакетаstringr может сделать работу довольно приятно. Все мои значения, безусловно, две части, разделенные точкой, поэтому я могу сделать:

> require(stringr)
> str_split_fixed(tst$y,"\\.",2)
      [,1]  [,2] 
 [1,] "BAR" "baz"
 [2,] "FOO" "foo"
 [3,] "BAZ" "baz"
 [4,] "BAZ" "foo"
 [5,] "BAZ" "bar"
 [6,] "FOO" "baz"
 [7,] "BAR" "bar"

Теперь я мог простоcbind что к моему фрейму данных, но я думал, что я пойму, как это сделать вdplyr трубопровод. Сначала я подумалmutate мог сделать это за один раз:

> tst %.% mutate(parts=str_split_fixed(y,"\\.",2))
Error: wrong result size (20), expected 10 or 1

я могу получитьmutate сделать это в два:

> tst %.% mutate(part1=str_split_fixed(y,"\\.",2)[,1], part2=str_split_fixed(y,"\\.",2)[,2])
    x       y part1 part2
1   1 BAR.baz   BAR   baz
2   2 FOO.foo   FOO   foo
3   3 BAZ.baz   BAZ   baz
4   4 BAZ.foo   BAZ   foo
5   5 BAZ.bar   BAZ   bar
6   6 FOO.baz   FOO   baz

но это работает строка разделена дважды.

«Лучший» я могу сделать так далеко вdplyr путь это (который я обнаружил только при написании этого вопроса ...):

> tst %.% do(cbind(.,data.frame(parts=str_split_fixed(.$y,"\\.",2))))
    x       y parts.1 parts.2
1   1 BAR.baz     BAR     baz
2   2 FOO.foo     FOO     foo
3   3 BAZ.baz     BAZ     baz
4   4 BAZ.foo     BAZ     foo
5   5 BAZ.bar     BAZ     bar

что неплохо, но теряет много читабельности по трубопроводу в R. Есть ли простой подход с использованиемmutate что я пропустил?

Ответы на вопрос(1)

Ваш ответ на вопрос