Hi,

This appears to be a simple problem that I am unable to solve. I have some data that looks like this:

    CHROM    POS    REF    ALT    TYPE       AF
    chr1     1      A      T      MISSENSE   0.23
    chr2     1      A      T,G    MISSENSE   0.17, 0.09

The above is dummy meaningless data, but it is representative of the problem at hand.

I'd like to `separate_rows` such that the `ALT` and `AF` are separated in a couples manner. Running `separate_rows` on the 2 columns would give me 4 rows, not 2. I'd like my output to be:

    CHROM    POS    REF    ALT    TYPE       AF
    chr1     1      A      T      MISSENSE   0.23
    chr2     1      A      T      MISSENSE   0.17
    chr2     1      A      G      MISSENSE   0.09

Is there any way I can conserve this combination while separating the values out? I am really far out from the VCF to go back and split multi-allelics.


Using *data.table*:

    library(data.table)
    
    x <- fread("CHROM POS REF ALT TYPE AF
    chr1 1 A T MISSENSE 0.23
    chr2 1 A T,G MISSENSE 0.17,0.09")
    
    x[, lapply(.SD, function(x) unlist(tstrsplit(x, ",", fixed = TRUE))),
        by = .(CHROM, POS, REF, TYPE)
      ][, .(CHROM, POS, REF, ALT, TYPE, AF = as.numeric(AF))]
    #    CHROM POS REF ALT     TYPE   AF
    # 1:  chr1   1   A   T MISSENSE 0.23
    # 2:  chr2   1   A   T MISSENSE 0.17
    # 3:  chr2   1   A   G MISSENSE 0.09

Below should work with auto type conversion, but it fails, as the first value "T" gets converted as logical "TRUE", next "T,G" as character, then when binding it, unfortunately, errors out:

    x[, lapply(.SD, function(x) unlist(tstrsplit(x, ",", fixed = TRUE, type.convert = TRUE))),
        by = .(CHROM, POS, REF, TYPE)]
    # Error in `[.data.table`(x, , lapply(.SD, function(x) unlist(tstrsplit(x,  : 
    #   Column 1 of result for group 2 is type 'character' but expecting type
    #   'logical'. Column types must be consistent for each group.

-------

Related SO post with other alternative solutions:  

  - [Split comma-separated strings in a column into separate rows](https://stackoverflow.com/q/13773770/680068)
