由此
x <- 1:10
block.size <- 3L
Run Code Online (Sandbox Code Playgroud)
我想生成一系列长度为 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
Run Code Online (Sandbox Code Playgroud)
我发现这个很好的答案适用于角色。
我可以想到一个循环来做到这一点,但如果可能的话,我肯定更喜欢更简洁和矢量化的方式。这是我的看法。
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)
}
Run Code Online (Sandbox Code Playgroud)
尝试embed()
> embed(x, block.size)[, block.size:1]
[,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
Run Code Online (Sandbox Code Playgroud)
或者,sequence
matrix(
sequence(
rep(1 + length(x) - block.size, block.size),
from = head(seq_along(x), block.size)
),
ncol = block.size
)
Run Code Online (Sandbox Code Playgroud)
这也给出了所需的输出
[,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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |