簡體   English   中英

如何在R中進行重正則表達式匹配

[英]How to do heavy regular expression matching in r

我有兩列的數據框(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列和匹配序列的數據幀返回。

在加載該數據並分配給名為“ dat”的變量時,我使用stringsAsFactors(因為“ df”是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,並且列的名稱為“ Seq”,因此將您無法解釋的“ V2”的使用更改為“ Seq”。

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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM