迭代字符串替换

时间:2014-06-03 01:53:23

标签: string r gsub

我有一个字符串,我想每3个字符在子字符串中添加swap,并为每次迭代生成1个输出:例如

print(str1)
DDDDDDDDDDDDDDDDDDDDDDDD

print(str2)
nnn

输出应该如下所示

nnnDDDDDDDDDDDDDDDDDDDDDD
DDDnnnDDDDDDDDDDDDDDDDDDD
DDDDDDnnnDDDDDDDDDDDDDDDD
DDDDDDDDDnnnDDDDDDDDDDDDD
DDDDDDDDDDDDnnnDDDDDDDDDD
DDDDDDDDDDDDDDDDnnnDDDDDD
DDDDDDDDDDDDDDDDDDDnnnDDD
DDDDDDDDDDDDDDDDDDDDDDnnn

任何想法?

1 个答案:

答案 0 :(得分:3)

positions <-  seq(1, nchar(str1), by=nchar(str2))
split.str1 <- substring(str1, positions, positions+nchar(str2)-1)

result <- sapply(seq(nchar(str1)/nchar(str2))
                 , function(i) {
                   split.str1[i] <- str2
                   paste(split.str1, collapse='')
                 })
result
## [1] "nnnDDDDDDDDDDDDDDDDDDDDD" "DDDnnnDDDDDDDDDDDDDDDDDD" "DDDDDDnnnDDDDDDDDDDDDDDD" "DDDDDDDDDnnnDDDDDDDDDDDD"
## [5] "DDDDDDDDDDDDnnnDDDDDDDDD" "DDDDDDDDDDDDDDDnnnDDDDDD" "DDDDDDDDDDDDDDDDDDnnnDDD" "DDDDDDDDDDDDDDDDDDDDDnnn"

感谢@BondedDust提供演示文稿的矩阵建议:

as.matrix(result)
##      [,1]                      
## [1,] "nnnDDDDDDDDDDDDDDDDDDDDD"
## [2,] "DDDnnnDDDDDDDDDDDDDDDDDD"
## [3,] "DDDDDDnnnDDDDDDDDDDDDDDD"
## [4,] "DDDDDDDDDnnnDDDDDDDDDDDD"
## [5,] "DDDDDDDDDDDDnnnDDDDDDDDD"
## [6,] "DDDDDDDDDDDDDDDnnnDDDDDD"
## [7,] "DDDDDDDDDDDDDDDDDDnnnDDD"
## [8,] "DDDDDDDDDDDDDDDDDDDDDnnn"