R从vcf文件中拉出子字符串

时间:2015-02-13 13:52:01

标签: r substring

我有来自VC的文件(变体调用格式)的数据,我想在R中使用。数据看起来通常是这样的:

0/1:127,38:165:99:255,0,255
0/0:127,0:127:99:0,255,255
1/1:0,127:127:99:255,255,0

我需要提取的信息是(第一行):

0/1,
127, and
38

为清楚起见:我将从第二行检索的信息:

0/0,
127, and 
0

从第三行开始:

1/1,
0, and
127

(字符串中的其余信息暂时没有用。)

这可以在R中完成吗? 我非常希望得到关于这一点的反馈。

感谢。 小号

2 个答案:

答案 0 :(得分:1)

1)用逗号替换冒号,然后使用read.table读取它:

read.table(text = gsub(":", ",", L), sep = ",", as.is = TRUE)[1:3]

,并提供:

   V1  V2  V3
1 0/1 127  38
2 0/0 127   0
3 1/1   0 127

2) gsubfn package中的另一种选择是read.pattern

library(gsubfn)

read.pattern(text = L, pattern = "^(.*?):(.*?),(.*?):", as.is = TRUE)

给出相同的结果。这是正则表达式的可视化。正则表达式中?的出现导致.*匹配最短而不是最长的字符串:

^(.*?):(.*?),(.*?):

Regular expression visualization

Debuggex Demo

注意:我们使用了这个输入数据:

L <- "0/1:127,38:165:99:255,0,255
0/0:127,0:127:99:0,255,255
1/1:0,127:127:99:255,255,0"

答案 1 :(得分:1)

另一种解决方案是使用VariantAnnotation;阅读vignette并查看?readVcf并确保使用ScanVcfParam()有选择地只阅读您感兴趣的文件的那些部分。请求有关Bioconductor {{3}的更多帮助如果这似乎是一种有用的方法。

相关问题