在 r 中创建 windows 个序列

Creating windows of a sequence in r

我有一个字符串,我想为其存储给定大小的所有可能 windows。在我的第一种方法中,我完成了以下操作:

teststring<-c("ABCBDBDBCBABABD")
n <- nchar(teststring) 
k <- 9 
test = substring(teststring, 1:(n-k+1), k:n)
test1 = strsplit(test,"")
test2 = do.call(cbind, test1)

但我想知道有没有更好的方法呢?我还需要找到一种循环方式执行此操作的方法,即:

A  B  C  B  D  B  D  B  C   B   A   B   A   etc.
B  C  B  D  B  D  B  C  B   A   B   A   B   
C  B  D  B  D  B  C  B  A   B   A   B   D   
B  D  B  D  B  C  B  A  B   A   B   D   A   
D  B  D  B  C  B  A  B  A   B   D   A   B   
B  D  B  C  B  A  B  A  B   D   A   B   C   
D  B  C  B  A  B  A  B  D   A   B   C   B   
B  C  B  A  B  A  B  D  A   B   C   B   D 
C  B  A  B  A  B  D  A  B   C   B   D   B  

以下内容不起作用,如子字符串文档中所述:

test = substring(teststring, 1:n, c(k:n, 1:k))

如有任何帮助,我们将不胜感激。

对于循环,我只是将您的测试字符串粘贴在一起。那么substring就简单了:

t2 = paste0(teststring, teststring)
substring(text = t2, 1:n, last = (1:n) + k)
# [1] "ABCBDBDBCB" "BCBDBDBCBA" "CBDBDBCBAB" "BDBDBCBABA" "DBDBCBABAB" "BDBCBABABD" "DBCBABABDA"
# [8] "BCBABABDAB" "CBABABDABC" "BABABDABCB" "ABABDABCBD" "BABDABCBDB" "ABDABCBDBD" "BDABCBDBDB"
# [15] "DABCBDBDBC"

如果您更喜欢矩阵形式,您可以随时 strsplit 之后,正如 akrun 在评论中所建议的那样。

如果您需要创建 windows 个序列作为矩阵

v1 <- strsplit(teststring,'')[[1]]
ln <- length(v1)
m1 <- embed(c(v1,v1), ln)
m1[,ncol(m1):1]

或者

matrix(v1, nrow=ln+1, ncol=ln)[-(ln+1),]