jkebinger jkebinger - 2 months ago 5x
R Question

Split a column of a data frame to multiple columns

I'd like to take data of the form

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

and use split the type column to get something like this:

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

I came up with something unbelievably complex involving some form of apply that worked, but I've since misplaced that. It seemed far too complicated to be the best way. I can use strsplit as below, but then unclear how to get that back into 2 columns in the data frame.

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

[1] "foo" "bar_2"

[1] "foo" "bar"

[1] "foo" "bar_2"

Thanks for any pointers. I've not quite groked R lists just yet.


Use stringr::str_split_fixed

str_split_fixed(before$type, "_and_", 2)