Dividir la columna de cadena del marco de datos en varias columnas

Me gustaría tomar datos del formulario

before = data.frame(attr = c(1,30,4,6), type=c('foo_and_bar','foo_and_bar_2'))
  attr          type
1    1   foo_and_bar
2   30 foo_and_bar_2
3    4   foo_and_bar
4    6 foo_and_bar_2

y usesplit() en la columna "type"desde arriba para obtener algo como esto:

  attr type_1 type_2
1    1    foo    bar
2   30    foo  bar_2
3    4    foo    bar
4    6    foo  bar_2

Se me ocurrió algo increíblemente complejo que involucra alguna forma deapply eso funcionó, pero desde entonces lo he perdido. Parecía demasiado complicado para ser la mejor manera. Puedo usarstrsplit como a continuación, pero luego no está claro cómo volver a colocarlo en 2 columnas en el marco de datos.

> strsplit(as.character(before$type),'_and_')
[[1]]
[1] "foo" "bar"

[[2]]
[1] "foo"   "bar_2"

[[3]]
[1] "foo" "bar"

[[4]]
[1] "foo"   "bar_2"

Gracias por cualquier sugerencia. Todavía no he asimilado las listas R.

Respuestas a la pregunta(15)

Su respuesta a la pregunta