У меня есть файл vcf со столбцом с разделенными запятыми вариантными аллелями («alt») и еще одним столбцом с их прогнозируемыми эффектами («информация»). (См. Структуру dput()
ниже для примера фрейма данных.) Однако по какой-либо причине программа прогнозирования вариантного эффекта выводит эффекты в случайном порядке, а не в том же порядке, в котором варианты перечислены в столбце «alt».
Я хотел бы извлечь только определенную информацию из каждого поля эффекта варианта (в реальном файле много информации в этом поле, которая мне не нужна) и объединить эту информацию в строку, разделенную запятыми. Однако сначала необходимо изменить порядок эффектов вариантов в соответствии с их порядком в столбце «alt».
Например, строка 2 в приведенном ниже фрейме данных в настоящее время выглядит следующим образом:
alt info
T,G G|intron,T|splice_site
где «G | интрон» означает, что эффект варианта «G» - «интрон». Я бы хотел, чтобы окончательный результат имел предсказанный эффект и был переупорядочен в соответствии со столбцом «alt», например:
alt info
T,G splice_site,intron
Таким образом, первый вариантный аллель всегда соответствует первому предсказанному эффекту и так далее ... Порядок нельзя просто изменить, потому что в некоторых столбцах они уже находятся в правильном порядке, или могут быть три варианта, которые находятся в случайный порядок и т. д.
Моя мысль заключалась в том, чтобы превратить «G | intron» в пару «ключ | значение», а затем изменить порядок ключей в соответствии со столбцом «alt», но я изо всех сил пытаюсь понять, как это сделать. Я использую конвейер для управления фреймом данных другими способами, поэтому решение должно работать как часть канала dplyr.
Пример структуры фрейма данных:
var <- structure(list(chr = c("01", "01", "01", "01"), pos = c(10, 20,
30, 40), ref = c("T", "A", "G", "C"), alt = c("A", "T,G", "A,C,T",
"G"), info = c("A|missense|A2L", "G|intron,T|splice_site", "T|missense|V28R,A|missense|V28E,C|missense|V28L",
"G|intergenic")), row.names = c(NA, -4L), class = c("tbl_df",
"tbl", "data.frame"))