Kel*_*ams 1 regex r bioinformatics sequencing vcf-variant-call-format
我是 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
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的文件的一个小示例部分。
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
Run Code Online (Sandbox Code Playgroud)
我想通过两种不同的方式来减少此数据集中的行数:
代码 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
Run Code Online (Sandbox Code Playgroud)
我想从代码 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
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助
凯利
尝试对于第一种情况:
dat[Reduce(`|`,lapply(dat[9:11], function(x) grepl("0/1|1/0|1/1", x))),]
Run Code Online (Sandbox Code Playgroud)
对于基于上述条件的第二种情况:
dat[ Reduce(`|`,lapply(dat[9:10], function(x) grepl("0/1|1/0|1/1", x)))
& grepl("0/0", dat[,11]),]
Run Code Online (Sandbox Code Playgroud)
dat[ Reduce(`|`,lapply(dat[9:10], function(x) grepl("0/1|1/0|1/1", x)))
& grepl("\\.\\/\\.|0/0", dat[,11]),]
Run Code Online (Sandbox Code Playgroud)