从这里
x <- 1:10
block.size <- 3L
我想生成一系列连续且重叠的长度为 3 的块,如下所示:
1,2,3
2,3,4
3,4,5
4,5,6
5,6,7
6,7,8
7,8,9
8,9,10
我发现这个很好的答案适用于角色。
我可以想到一个循环来做到这一点,但如果可能的话,我肯定更喜欢更简洁和矢量化的方式。这是我的看法。
block.nums <- length(x)-len+1
blocks <- vector(mode = "list", length = block.nums)
for (i in 1:block.nums) {
blocks[[i]] <- i:(i+block.size-1)
}
你可以尝试:
ll <- length(x) - (block.size - 1)
mat <- matrix(NA, nrow = length(x) - (block.size - 1), ncol = block.size)
sapply(seq_len(block.size), \(xx) mat[,xx] <- x[seq_len(ll) - 1 + xx])
输出:
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 2 3 4
[3,] 3 4 5
[4,] 4 5 6
[5,] 5 6 7
[6,] 6 7 8
[7,] 7 8 9
[8,] 8 9 10