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