Adding multiple columns in a dplyr mutate call
This answer applies here as well; the following approach is both tidyverse-idiomatic and more performant than separate()
(as of 2020):
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=""))
library(dplyr)
library(purrr)
tst %>%
mutate(tmp_chunks = stringr::str_split(y, fixed("."), n = 2)) %>%
mutate(y1 = map_chr(tmp_chunks, 1),
y2 = map_chr(tmp_chunks, 2)) %>%
select(-tmp_chunks)
... Or if you don't want y
anymore after splitting it, you can change the last line to
select(-tmp_chunks, -y)
You can use separate()
from tidyr
in combination with dplyr
:
tst %>% separate(y, c("y1", "y2"), sep = "\\.", remove=FALSE)
x y y1 y2
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
7 7 BAR.bar BAR bar
8 8 BAZ.baz BAZ baz
9 9 FOO.bar FOO bar
10 10 BAR.foo BAR foo
Setting remove=TRUE
will remove column y