生成连续且重叠的数字块序列

umb*_*987 5 r sequence

由此

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)

Tho*_*ing 7

尝试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)