[英]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.