我有一个包含两列的数据帧(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列和匹配的序列的数据帧返回。
答案 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"