2016-02-25 3 views
0

Этот вопрос уже задан много раз, однако я не мог получить ответ в соответствии с моими потребностями.Подстроки цельной строки в R

Я знаю некоторый способ расщепления строк в R. Если у меня есть строка x <- "AGCAGT" и хочу разбить строку на символы из трех. Я хотел бы сделать это с помощью

substring(x, seq(1, nchar(x)-1, 3), seq(3, nchar(x), 3)) 

и строк два символа гораздо быстрее

split <- strsplit(x, "")[[1]] 
substrg <- paste0(split[c(TRUE, FALSE)], split[c(FALSE, TRUE)]) 

Как нового пользователь R, я чувствую трудность раздельной строки в соответствии с моими требованиями. Если x <- "AGCTG", и если я использую substring(x, seq(1, nchar(x)-1, 3), seq(3, nchar(x), 3)), я не получу последние две символьные подстроки. Я получаю

"AGC" "" 

Однако я заинтересован, чтобы получить что-то вроде

"AGC" "TG" 

или если у меня есть x <- "AGCT" и расщепление 3-х символов, в то время, я хотел бы получить некоторые вещи, как

"AGC" "T"` 

Я коротко, как разбить строку на подстроки нужной длины (2,3,4,5 ... n), а также сохранить оставшиеся символы меньше желаемой длины.

+0

См. Вывод 'seq (3, nchar (x), 3)', который является концом подстроки, и вы получите то, что проблема. – nicola

+0

Похоже, что существует [есть ответ] (http://stackoverflow.com/a/23262521/1655567), касающийся именно той же проблемы. – Konrad

+0

Яркий дубликат не решает проблему. Ответ 'zx8754', однако, позже удаленный, кажется, решает мою проблему. –

ответ

1

Вот одно из возможных решений в несколько простых шагов.

x <- "AGCGGCCAGCTGCCTGAA" 

# desired length 
mylen = 5 

# start indices 
start <- seq(1, nchar(x), mylen) 

# end indicies 
end <- pmin(start + mylen - 1, nchar(x)) 

substring(x, start, end) 
[1] "AGCGG" "CCAGC" "TGCCT" "GAA" 
1

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

x <- "AGCGGCCAGCTGCCTGAA" 
mylen <- 5 
ss <- strsplit(x, "")[[1]] 
sapply(split(ss, ceiling(seq_along(ss)/mylen)), paste, collapse = "") 
Смежные вопросы