Pivot_longer: GVCF столбцы в строки

Добрый день,

после просмотра переполнения стека и не найдя решения моей конкретной проблемы, я решил спросить сообщество, надеясь, что это может быть полезно и для кого-то другого.

У меня есть генетические данные в совместном формате VCF. Я пытаюсь преобразовать несколько столбцов всего в два, которые инкапсулируют имя образца и информацию о генотипе соответственно. Это довольно большой набор данных, поэтому я пытаюсь установить функцию или цикл for, которые позволяют мне это сделать.

вот макет формата данных, с которым я работаю

      df <- structure(list(Chromosome = c("chr 1", "chr 2", "chr 3", 
"chr 4", "chr 5", "chr 6"), position = c("123444", 
"364829", "098090", "123134", "123234", 
"34234"), reference = c("C", "G", 
"C,GC", "ATTA", "GATTACA", "TC,GCT"
), alt = c("AC,G", "CG.GT", "A,*", 
"GA,CGT", "TA,GTA", "AAC"), 
AD_GT_SAMP_1 = c('0,0|./.|', '148,136|0/1|', '148,132|0/1|', '48,236|1/1|', '0,0|./.|','0,0|./.|'),
V5 = c('zw42dx28.cd14.20180120.ef','zw42dx28.cd14.20180120.ef','zw42dx28.cd14.20180120.ef','zw42dx28.cd14.20180120.ef','zw42dx28.cd14.20180120.ef','zw42dx28.cd14.20180120.ef'),
AD_GT_SAMP_2 = c('0,10|./.|', '148,136|0/1|', '148,132|0/1|', '428,236|1/1|', '10,0|./.|','20,0|./.|'),
V7 = c('xs82d2x8.bulk.20180121.ef','xs82d2x8.bulk.20180121.ef','xs82d2x8.bulk.20180121.ef','xs82d2x8.bulk.20180121.ef','xs82d2x8.bulk.20180121.ef','xs82d2x8.bulk.20180121.ef'))) %>%
as.data.frame()

Столбцы 1:4 постоянны для всех образцов. Я хотел бы, чтобы в столбце 5 были все имена образцов, которые в настоящее время хранятся в (data[,c(5,7,9,...)]), а в столбце 6 информация о генотипах в настоящее время хранится в (data[,c(6,8,10,...)])

Я пробовал использовать pivot_longer, и хотя он не выдает мне ошибки при попытке:

      pivot_longer(data = mock_gvcf, cols = c(V5,V7,etc...), names_to = '.value')

Набор данных сдвигает столбцы полностью вправо (например, в наборе данных с 80 столбцами, где v5-v7-v9-v11 ... содержат имена образцов, содержимое столбцов не изменяется, а смещается вправо от столбец v80).

Изменить: комментарии ниже помогают эффективно очистить данные для фиктивных данных. Однако похоже, что формат имени в реальном наборе данных является проблемой.

Формат samp_id для реальных данных имеет вид: (sampid.celltype.collectiondate.stageofcollection) Где sampid имеет 4 разных имени, celltype имеет 4 разных типа Дата сбора имеет 6 временных точек, а стадия сбора имеет 3 временных точки.

Будем очень признательны за любые предложения. Заранее спасибо.

1 ответ

      pivot_longer(df, -(1:4),  names_to = c('.value', 'grp'), names_pattern = '(.*)_(\\d+)')

# A tibble: 12 x 7
   Chromosome position reference alt    grp   AD_GT_SAMP   sAMP      
   <chr>      <chr>    <chr>     <chr>  <chr> <chr>        <chr>     
 1 chr 1      123444   C         AC,G   1     0,0|./.|     SAMP1_NAME
 2 chr 1      123444   C         AC,G   2     0,10|./.|    SAMP2_NAME
 3 chr 2      364829   G         CG.GT  1     148,136|0/1| SAMP1_NAME
 4 chr 2      364829   G         CG.GT  2     148,136|0/1| SAMP2_NAME
 5 chr 3      098090   C,GC      A,*    1     148,132|0/1| SAMP1_NAME
 6 chr 3      098090   C,GC      A,*    2     148,132|0/1| SAMP2_NAME
 7 chr 4      123134   ATTA      GA,CGT 1     48,236|1/1|  SAMP1_NAME
 8 chr 4      123134   ATTA      GA,CGT 2     428,236|1/1| SAMP2_NAME
 9 chr 5      123234   GATTACA   TA,GTA 1     0,0|./.|     SAMP1_NAME
10 chr 5      123234   GATTACA   TA,GTA 2     10,0|./.|    SAMP2_NAME
11 chr 6      34234    TC,GCT    AAC    1     0,0|./.|     SAMP1_NAME
12 chr 6      34234    TC,GCT    AAC    2     20,0|./.|    SAMP2_NAME
Другие вопросы по тегам