Использование R для секвенирования VCF-файлов следующего поколения

Я начинающий R Я использую R для анализа моего большого vcf-файла секвенирования следующего поколения, и у меня возникли некоторые трудности. Я импортировал очень большой файл vcf в виде фрейма данных (2446824 объекта из 177 переменных) и создал подмножество только из 3 интересующих меня выборок (2446824 объекта из 29 переменных).

Теперь я хочу уменьшить размеры еще больше (уменьшить количество строк примерно до 200000). Я пытался использовать grep, но не могу заставить его работать. Я получаю ошибку

Error in "0/1" | "1/0" : 
   operations are possible only for numeric, logical or complex types

Вот небольшая примерная часть файла, с которым я работаю.

Chr Start   End Ref Alt Func.refGene    INFO    FORMAT  Run.Sample1 Run.Sample2 Run.Sample3
489 1   909221  909221  T   C   PASS    GT:AD:DP:GQ:PL  0/1:11,0:11:33:0,33,381     ./.     ./.
490 1   909238  909238  G   C   PASS    GT:AD:DP:GQ:PL  0/1:11,6:17:99:171,0,274    0/1:6,5:11:99:159,0,116     1/1:0,15:15:36:441,36,0
491 1   909242  909242  A   G   PASS    GT:AD:DP:GQ:PL  0/1:16,4:13:45:0,45,532     0/0:11,0:11:30:0,30,366     0/0:16,0:17:39:0,39,479
492 1   909309  909309  T   C   PASS    GT:AD:DP:GQ:PL  0/0:23,0:23:54:0,54,700     0/0:15,1:16:36:0,36,463     0/0:19,0:19:48:0,48,598

Есть два способа уменьшить количество строк в этом наборе данных:

Код 1. Если либо $Run.Sample1, либо $Run.Sample2, либо $Run.Sample3 содержит "0/1", "1/0" или "1/1", сохраните всю строку

Код 2. Если $Run.Sample1 или $Run.Sample2 содержат "0/1" или "1/0" или "1/1", а $Run.Sample3 содержит "0/0", сохраните всю строку

Результаты, которые я хотел бы получить из кода 1:

Chr Start   End Ref Alt Func.refGene    INFO    FORMAT  Run.Sample1 Run.Sample2 Run.Sample3
489 1   909221  909221  T   C   PASS    GT:AD:DP:GQ:PL  0/1:11,0:11:33:0,33,381     ./.     ./.
490 1   909238  909238  G   C   PASS    GT:AD:DP:GQ:PL  0/1:11,6:17:99:171,0,274    0/1:6,5:11:99:159,0,116     1/1:0,15:15:36:441,36,0
491 1   909242  909242  A   G   PASS    GT:AD:DP:GQ:PL  0/1:16,4:13:45:0,45,532     0/0:11,0:11:30:0,30,366     0/0:16,0:17:39:0,39,479

Результаты, которые я хотел бы получить из кода 2:

Chr Start   End Ref Alt Func.refGene    INFO    FORMAT  Run.Sample1 Run.Sample2 Run.Sample3
489 1   909221  909221  T   C   PASS    GT:AD:DP:GQ:PL  0/1:11,0:11:33:0,33,381     ./.     ./.
491 1   909242  909242  A   G   PASS    GT:AD:DP:GQ:PL  0/1:16,4:13:45:0,45,532     0/0:11,0:11:30:0,30,366     0/0:16,0:17:39:0,39,479

Большое спасибо за вашу помощь

Келли

1 ответ

Решение

Попробуйте для первого случая:

  dat[Reduce(`|`,lapply(dat[9:11], function(x) grepl("0/1|1/0|1/1", x))),]

Для второго случая на основании упомянутых условий:

 dat[ Reduce(`|`,lapply(dat[9:10], function(x) grepl("0/1|1/0|1/1", x))) 
              & grepl("0/0", dat[,11]),]

Обновить

 dat[ Reduce(`|`,lapply(dat[9:10], function(x) grepl("0/1|1/0|1/1", x))) 
       & grepl("\\.\\/\\.|0/0", dat[,11]),]
Другие вопросы по тегам