【问题标题】:R pulling out sub strings from vcf filesR从vcf文件中提取子字符串
【发布时间】:2015-02-13 13:52:00
【问题描述】:

我有来自 VCF 文件(变体调用格式)的数据,我想在 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 中完成吗? 我非常有义务对此提供反馈。

谢谢。 S

【问题讨论】:

  • 使用y<-substring(x,1,9)然后使用strsplit(y,":|,")怎么样?
  • 啊,我这里可能不清楚。我需要这样的:
  • 啊,我这里可能不清楚。对于第一行,我需要这样的东西:x
  • 在这种情况下,您需要使问题更清楚并提供可重现的示例。
  • strsplit(y,":") 单独工作,但是。

标签: r substring


【解决方案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) 替代方法是read.pattern 中的gsubfn package

library(gsubfn)

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

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

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

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"

【讨论】:

    【解决方案2】:

    另一种解决方案是使用VariantAnnotation;阅读vignette 并查看?readVcf 并确保使用ScanVcfParam() 选择性地读取您感兴趣的文件部分。如果这似乎是一种有用的方法,请在Bioconductor support forum 上寻求更多帮助.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      • 2017-12-30
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      相关资源
      最近更新 更多