#r #dataframe #split #partition #seq
Вопрос:
Предположим, у меня есть следующая последовательность:
ААААААААААААГСС GGTGCGGTGGCTCATGCCTGTAAGCCCAGCACTTGGGAGGCCAAGGCAGGCGGATCACTAGAGGTCAG
начиная с позиции А (которая выделена жирным шрифтом в последовательности) Я хочу разделить его на куски длиной 5 символов, но я хочу, чтобы куски были на расстоянии 3 символов друг от друга, что означает, что я хочу получить
«GGTGC» , «GGCTC» , «CCTGT», «CCCAG» и так далее до конца. Затем я хотел бы получить ту же информацию от полужирного А до начала последовательности, означающей:
AAGCC, ААААА ,…
Как я могу это сделать?
Ответ №1:
Мы можем использовать поиск по регулярному выражению для разделения, т. е. Мы разделяем на 3 символа ( .
— представляет любой символ в регулярном выражении), который следует за 5 символами
strsplit(str1, "(?<=.....)...", perl = TRUE)[[1]]
Или, если мы хотим построить шаблон динамически, используйте strrep
с paste
n1 <- 200
n2 <- 50
pat <- paste0("(?<=", strrep(".", n1), ")", strrep(".", n2))
данные
str1 <- "AAAAAAAAAAAAGCCAGGTGCGGTGGCTCATGCCTGTAAGCCCAGCACTTTGGGAGGCCAAGGCAGGCGGATCACTAGAGGTCAG"
Комментарии:
1. Большое спасибо за ваш ответ. В реальной проблеме я хочу разделить ее на окна длиной 200 с 50 символами между ними. Как я могу избежать использования точек в этом случае?
2. @A4747 вы можете использовать
paste0("(?<=", strrep(".", 200), ")", strrep(".", 50))