Mixalis Mixalis - 1 month ago 10
R Question

Split String to data frame

I'm trying to split a one-line text in R and store them in a dataframe.

For instance. A text like the following:

hello-world;1|(good)night world;2|...


Is expected to become:

V1 V2
hello-world 1
(good)night world 2


In order to achieve this: I start by splitting the initial text on '\'. For that reason, I use separate from
tidyr
.

library(tidyr)
as.data.frame(str) %>% separate(str, into=c("V1"), sep='\\|')
1 hello-world;1
#Warning message:
#Too many values at 1 locations: 1


I suspect in the first split the issue rises with the
-
. How can I solve this issue?

Answer Source

If you want to do this via tidyverse then you need to use unnest to make it long and then separate the values i.e.

libraary(tidyverse)

data.frame(v1 = 'hello-world;1|(good)night world;2|') %>% 
       mutate(v1 = strsplit(as.character(v1), '\\|')) %>% 
       unnest(v1) %>% 
       separate(v1, into = c('v1', 'v2'), sep = ';')

# A tibble: 2 x 2
#                 v1    v2
#*             <chr> <chr>
#1       hello-world     1
#2 (good)night world     2