Agregar múltiples columnas en una llamada dplyr mutate

Tengo un marco de datos con una columna de caracteres separados por puntos:

> 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

y quiero dividir esa columna en dos columnas nuevas que contengan las partes a cada lado del punto.str_split_fixed del paquetestringr puede hacer el trabajo bastante bien. Todos mis valores son definitivamente dos partes separadas por un punto, así que puedo hacer:

> 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"

Ahora solo podríacbind eso a mi marco de datos, pero pensé que averiguaría cómo hacerlo en undplyr tubería. Primero pensémutate podría hacerlo en uno:

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

puedo conseguirmutate hacerlo en dos:

> 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

pero eso ejecuta la cadena dividida dos veces.

"Lo mejor" que puedo hacer hasta ahora en undplyr de esta manera (que solo descubrí al escribir esta pregunta ...):

> 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

lo cual no está mal, pero pierde mucha de la legibilidad de las cosas canalizadas en R. ¿Existe un enfoque simple usandomutate que me he perdido?

Respuestas a la pregunta(1)

Su respuesta a la pregunta