R中整个字符串的子串

时间:2016-02-25 11:17:00

标签: r substring

这种问题已被多次询问,但根据我的需要,我无法得到答案。

我知道在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)的子串,并保留那些小于所需长度的剩余字符。

2 个答案:

答案 0 :(得分: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 :(得分:1)

通过 zx8754 回答。但不幸的是,在一些人将问题标记为重复后,他删除了答案。如果他想发布这个作为答案,我会删除我的帖子。

x <- "AGCGGCCAGCTGCCTGAA"
mylen <- 5 
ss <- strsplit(x, "")[[1]]
sapply(split(ss, ceiling(seq_along(ss)/mylen)), paste, collapse = "")