# R code help for creating new column by delimiter and filling the new column with delimited columns [closed]

column0       c1  c2  c3    new column
abc|cds|oko  abc cds oko    oko
avd|afd      avd afd
|gs           gs     gs
asd          asd            asd


I am trying to split the Column0 by | pipe operator and making column c3 content as new column, suppose if the c3 column is blank than c2 content to be filled in new column, if suppose c2 and c3 column are blank than c1 content to be filled in column ?? how to achieve this in R code

• What should the outcome of the column split look like? Should there be one row where column0 is abc, a second where it's cds, a third where it's oko, and so on? Or are you trying to separate column0 into multiple columns? Jul 4, 2017 at 11:28

Assuming I understood your question correctly, you could use the tidyr and dplyr packages.

library(tidyr)
library(dplyr)

my_df <- data.frame('column0'=c('abc|cds|oko','avd|afd','|gs','asd'),  stringsAsFactors = FALSE)

new_df <- my_df %>%
# separate column0 into three columns based on the location of the pipe |
tidyr::separate(column0, c('c1','c2','c3'), sep ='\\|', remove = FALSE, fill="right") %>%
# make a newcolumn based on values in column0. Take only letters following the last pipe |
dplyr::mutate(newcolumn=sub(pattern=".*\\|([a-z]*\$)", replacement="\\1", column0)) %>%
# Make the NA's blanks
dplyr::mutate_each(funs(ifelse(is.na(.),"",.)))

new_df

column0       c1    c2    c3   newcolumn
1 abc|cds|oko   abc   cds   oko       oko
2     avd|afd   avd   afd             afd
3         |gs         gs              gs
4         asd   asd                   asd


Although this puts "gs" in c2 instead of c3.