Как найти подстроку из строки в R?

Если моя строка представляет собой последовательность ДНК,

x<-"TATAATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGATATAATGACCGGGTAG"

Я хочу извлечь подстроку из ATG в TAA, TGA или TAG. Я могу извлечь из одной точки в другую с помощью пакета string i с регулярным выражением.

Мой код

stri_extract_all(x, regex = "ATG.*?TAA")

Помогите мне решить мой вопрос.

2 ответа

Я верю что ты имел ввиду str_extract_all от stringr пакет. Эта функция не имеет аргумента под названием regex; тебе нужно pattern, Как только вы получите, вы можете просто использовать или | разрешить любое из окончаний последовательности.

library(stringr)
str_extract_all(x, pattern="ATG.*?(TAA|TGA|TAG)")
[[1]]
[1] "ATGCAACGAGGGGCATAA" "ATGCCCAAAATCTGA"    "ATGACCGGGTAG"

Вот возможность использования Biostrings:

library("Biostrings")

x <- "TATAATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGATATAATGACCGGGTAG"

# Get all combinations of substrings starting with "ATG" and ending with "TAA"
library(tidyverse)
df <- expand.grid(start(matchPattern("ATG", x)), end(matchPattern("TAA", x))) %>%
    filter(Var1 < Var2);
ir <- IRanges(df[, 1], df[, 2]);

extractAt(BString(x), IRanges(df[, 1], df[, 2]));
#A BStringSet instance of length 3
#  width seq
#[1]    18 ATGCAACGAGGGGCATAA
#[2]    44 ATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGATATAA
#[3]    20 ATGCCCAAAATCTGATATAA

Поскольку вы работаете с данными последовательности ДНК, я рекомендую ознакомиться с Biostrings от Биокондуктора. Существует много пакетов Bioconductor за пределами Biostrings это облегчит вашу жизнь (в будущем), когда вы работаете с данными последовательности ДНК / РНК.


Обновить

Чтобы учесть несколько стоп-кодонов, просто оберните end(matchPattern(...)) в пределах sapply петля.

df <- expand.grid(
    start(matchPattern("ATG", x)),
    unlist(sapply(c("TAA", "TGA", "TAG"), function(ss) end(matchPattern(ss, x))))) %>%
    filter(Var1 < Var2);
ir <- IRanges(df[, 1], df[, 2]);

extractAt(BString(x), IRanges(df[, 1], df[, 2]));
# [1]    18 ATGCAACGAGGGGCATAA
# [2]    44 ATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGATATAA
# [3]    20 ATGCCCAAAATCTGATATAA
# [4]    39 ATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGA
# [5]    15 ATGCCCAAAATCTGA
# ...   ... ...
# [7]    23 ATGCCCAAAATCTGATATAATGA
# [8]     4 ATGA
# [9]    55 ATGCAACGAGGGGCATAATTATATATGCCCAAAATCTGATATAATGACCGGGTAG
#[10]    31 ATGCCCAAAATCTGATATAATGACCGGGTAG
#[11]    12 ATGACCGGGTAG
Другие вопросы по тегам