如何在r中进行重正则表达式匹配

时间:2015-04-03 21:24:28

标签: r perl

我有一个包含两列的数据帧(df)。第一个(df $ Pos)保留一个基因坐标,第二个(df $ Seq)保留基因序列。大约有20,000行,看起来像:

Pos                          Seq
chr1:1124-12324324           ggctgggtgcagtggctcatgcctgtaattc
                             ggtcagaagttcgagaccagcctggccaacattgt
                             gaaaccctgtctctactaaaaatac
chr2:767:78932               ggctgggtgcagtggctcatgcctgtaattc
                             ggtcagaagttcgagaccagcctggccaacattgt
                             gaaaccctgtctctactaaaaatac

(每个Pos的序列连续一行 - 只能将其格式化)

我正在寻找所有这些中的特定序列,如

      ggccaaggcgta

我希望结果只是一个数据框,其中包含与匹配

的模式的Pos和Seq

我试过

dfMatch <- as.data.frame(df[grep("ggtcaggagttcgagaccag",df$V2), ])

但是R拖了很久,然后没有返回任何比赛。我知道这匹配,因为我在文本编辑器中尝试了它,我得到大约6000行。我认为R不是理想情况下为这种重模式匹配而设置的,所以我希望从R调用perl,但我不知道如何将结果作为具有Pos列和匹配的序列的数据帧返回。

1 个答案:

答案 0 :(得分:1)

我在加载数据时使用stringsAsFactors并将其分配给名为&#39; dat&#39;的变量。 (因为&#34; df&#34;是R中的函数名):

dat <-
structure(list(Pos = c("chr1:1124-12324324", "chr2:767:78932"
), Seq = c("ggctgggtgcagtggctcatgcctgtaattcggtcagaagttcgagaccagcctggccaacattgtgaaaccctgtctctactaaaaatac", 
"ggctgggtgcagtggctcatgcctgtaattcggtcagaagttcgagaccagcctggccaacattgtgaaaccctgtctctactaaaaatac"
)), .Names = c("Pos", "Seq"), class = "data.frame", row.names = c(NA, 
-2L))

我也使用grepl而列的名称是&#34; Seq&#34;,所以改变了你对&#34; V2&#34;的无法解释的用法。到&#34; Seq&#34;。

dfMatch <- as.data.frame(dat[grepl("ggtcaggagttcgagaccag",dat$Seq), ])

没有在该测试集上获得任何点击,但是当我在第一个测试集的中间提取了一个小部分时:

> str(dfMatch)
'data.frame':   0 obs. of  2 variables:
 $ Pos: chr 
 $ Seq: chr 

> dfMatch <- as.data.frame(dat[grepl("gcctgtaatt",dat$Seq), ])
> str(dfMatch)
'data.frame':   2 obs. of  2 variables:
 $ Pos: chr  "chr1:1124-12324324" "chr2:767:78932"
 $ Seq: chr  "ggctgggtgcagtggctcatgcctgtaattcggtcagaagttcgagaccagcctggccaacattgtgaaaccctgtctctactaaaaatac" "ggctgggtgcagtggctcatgcctgtaattcggtcagaagttcgagaccagcctggccaacattgtgaaaccctgtctctactaaaaatac"