-3

Say I have a data frame like the following:

> mydf <- data.frame(a=c('A','B','C','D/E','F','G/H','I/J','K','L'), b=c(1,2,3,'4/5',6,'7/8','9/10',11,12))
> mydf
    a    b
1   A    1
2   B    2
3   C    3
4 D/E  4/5
5   F    6
6 G/H  7/8
7 I/J 9/10
8   K   11
9   L   12

How do I make it look like the following, with an easy one-liner (preferably base)? Thanks

> mydf2
     a    b
1    A    1
2    B    2
3    C    3
4    D    4
5    E    5
6    F    6
7    G    7
8    H    8
9    I    9
10   J   10
11   K   11
12   L   12
DaniCee
  • 2,397
  • 6
  • 36
  • 59

1 Answers1

2

You can use separate_rows from the tidyr package

library(tidyr)
mydf <- data.frame(a=c('A','B','C','D/E','F','G/H','I/J','K','L'), b=c(1,2,3,'4/5',6,'7/8','9/10',11,12))
mydf

#>     a    b
#> 1   A    1
#> 2   B    2
#> 3   C    3
#> 4 D/E  4/5
#> 5   F    6
#> 6 G/H  7/8
#> 7 I/J 9/10
#> 8   K   11
#> 9   L   12

separate_rows(mydf, a, b, convert = TRUE)

#>    a  b
#> 1  A  1
#> 2  B  2
#> 3  C  3
#> 4  D  4
#> 5  E  5
#> 6  F  6
#> 7  G  7
#> 8  H  8
#> 9  I  9
#> 10 J 10
#> 11 K 11
#> 12 L 12

Created on 2018-04-18 by the reprex package (v0.2.0).

Tung
  • 26,371
  • 7
  • 91
  • 115