Использование 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]),]