Разделение данных на фрагменты, но с расстоянием между ними

#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))