首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将字符串拆分成给定长度的子串?

如何将字符串拆分成给定长度的子串?
EN

Stack Overflow用户
提问于 2012-07-24 04:01:05
回答 3查看 58.4K关注 0票数 34

我有一个字符串,例如:

"aabbccccdd"

我想把这个字符串分解成一个长度为2的子字符串的向量:

"aa" "bb" "cc" "cc" "dd"

EN

回答 3

Stack Overflow用户

发布于 2012-07-24 04:09:11

代码语言:javascript
复制
string <- "aabbccccdd"
# total length of string
num.chars <- nchar(string)

# the indices where each substr will start
starts <- seq(1,num.chars, by=2)

# chop it up
sapply(starts, function(ii) {
  substr(string, ii, ii+1)
})

这给了我们

代码语言:javascript
复制
[1] "aa" "bb" "cc" "cc" "dd"
票数 12
EN

Stack Overflow用户

发布于 2013-02-19 01:45:00

可以使用矩阵对字符进行分组:

代码语言:javascript
复制
s2 <- function(x) {
  m <- matrix(strsplit(x, '')[[1]], nrow=2)
  apply(m, 2, paste, collapse='')
}

s2('aabbccddeeff')
## [1] "aa" "bb" "cc" "dd" "ee" "ff"

不幸的是,对于奇数字符串长度的输入,这会中断,并给出一个警告:

代码语言:javascript
复制
s2('abc')
## [1] "ab" "ca"
## Warning message:
## In matrix(strsplit(x, "")[[1]], nrow = 2) :
##   data length [3] is not a sub-multiple or multiple of the number of rows [2]

更不幸的是,对于奇数字符串长度的输入,@GSee中的g1g2会默默返回错误的结果:

代码语言:javascript
复制
g1('abc')
## [1] "ab"

g2('abc')
## [1] "ab" "cb"

以下是遵循s2精神的函数,它接受每个组中的字符数的参数,并在必要时保留最后一项:

代码语言:javascript
复制
s <- function(x, n) {
  sst <- strsplit(x, '')[[1]]
  m <- matrix('', nrow=n, ncol=(length(sst)+n-1)%/%n)
  m[seq_along(sst)] <- sst
  apply(m, 2, paste, collapse='')
}

s('hello world', 2)
## [1] "he" "ll" "o " "wo" "rl" "d" 
s('hello world', 3)
## [1] "hel" "lo " "wor" "ld" 

(它确实比g2慢,但比g1快大约7倍)

票数 2
EN

Stack Overflow用户

发布于 2014-04-24 15:28:27

虽然丑陋,但很管用

代码语言:javascript
复制
sequenceString <- "ATGAATAAAG"

J=3#maximum sequence length in file
sequenceSmallVecStart <-
  substring(sequenceString, seq(1, nchar(sequenceString)-J+1, J), 
    seq(J,nchar(sequenceString), J))
sequenceSmallVecEnd <-
    substring(sequenceString, max(seq(J, nchar(sequenceString), J))+1)
sequenceSmallVec <-
    c(sequenceSmallVecStart,sequenceSmallVecEnd)
cat(sequenceSmallVec,sep = "\n")

提供ATG AAT AAA G

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11619616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档