使用R代替下一代测序vcf文件

时间:2014-09-01 05:30:01

标签: r grep bioinformatics sequencing

我是R初学者。我正在使用R来分析我的大型下一代测序vcf文件,并且遇到了一些困难。我已经导入了非常大的vcf文件作为数据框(在177个变量中为2446824个障碍)并且仅使用我感兴趣的3个样本(29个变量的2446824个障碍物)制作了一个子集。

我现在希望进一步减小尺寸(将行减少到大约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 个答案:

答案 0 :(得分:4)

尝试 对于第一种情况:

  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]),]