我有来自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中完成吗? 我非常希望得到关于这一点的反馈。
感谢。 小号
答案 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)
给出相同的结果。这是正则表达式的可视化。正则表达式中?
的出现导致.*
匹配最短而不是最长的字符串:
^(.*?):(.*?),(.*?):
注意:我们使用了这个输入数据:
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}的更多帮助如果这似乎是一种有用的方法。