-1

I would like to get newdf from olddf by splitting the var at _ and creating a column for each. So I would like the following. Thank you in advance


olddf <- data.frame('Z' = c('Z1','Z2','Z3'), 
          'var' = c('A_H','A_H', 'B_J'))

newdf <- data.frame('Z' = c('Z1','Z2','Z3'), 
                    'var1' = c('A','A','B'),
                    'var2' = c('H','H','J'))

1 Answers1

1

Base R:

> cbind(olddf[-2], t(as.data.frame(strsplit(olddf$var, '_'), row.names=c("var1", "var2"))), row.names=NULL)
   Z var1 var2
1 Z1    A    H
2 Z2    A    H
3 Z3    B    J
> 

With tidyr:

> tidyr::separate(olddf, var, c('var1', 'var2'), sep = '_')
   Z var1 var2
1 Z1    A    H
2 Z2    A    H
3 Z3    B    J
> 
U13-Forward
  • 69,221
  • 14
  • 89
  • 114