Разделить на 3 символа - PullRequest
       26

Разделить на 3 символа

1 голос
/ 17 сентября 2011

У меня очень простой вопрос: как мне разделить следующий текст на 3 в одном коде

mycodes <- c("ATTTGGGCTAATTTTGTTTCTTTCTGGGTCTCTC")
strsplit(mycodes, split = character(3), fixed = T, perl = FALSE, useBytes = FALSE)

[[1]]
 [1] "A" "T" "T" "T" "G" "G" "G" "C" "T" "A" "A" "T" "T" "T" "T" "G" "T" "T" "T" "C"
[21] "T" "T" "T" "C" "T" "G" "G" "G" "T" "C" "T" "C" "T" "C"

Это не то, что я хочу;Я хочу три буквы одновременно:

[1] "ATT"  "TGG", "GCT"...............and so on the final may be of one, two or three letters depending upon the letter availability.

Спасибо;

Ответы [ 3 ]

6 голосов
/ 17 сентября 2011

Полагаю, вы хотите работать с кодонами. Если это так, вы можете посмотреть на пакет Biostrings от Bioconductor. Он предоставляет различные инструменты для работы с данными биологической последовательности.

library(Biostrings)
?codons

Вы можете добиться того, чего хотите, с небольшим неуклюжим принуждением:

as.character(codons(DNAString(mycodes)))
2 голосов
/ 17 сентября 2011

Вот один подход, использующий stringr пакет

require(stringr)
start = seq(1, nchar(mycodes), 3)
stop  = pmin(start + 2, nchar(mycodes))
str_sub(mycodes, start, stop)

Выход

[1] "ATT" "TGG" "GCT" "AAT" "TTT" "GTT" "TCT" "TTC" "TGG"
[10] "GTC" "TCT" "C" 
1 голос
/ 25 апреля 2015

Вы также можете использовать:

 strsplit(data, '(?<=.{3})', perl=TRUE)
[[1]]
 [1] "ATT" "TGG" "GCT" "AAT" "TTT" "GTT" "TCT" "TTC" "TGG" "GTC" "TCT" "C" 

или

library(stringi)
stri_extract_all_regex(data, '.{1,3}')
...