在 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),]
我有一个字符串,我想为其存储给定大小的所有可能 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),]