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

问题描述 投票:0回答:1

从这里

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)
}
r sequence
1个回答
0
投票

你可以尝试:

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
© www.soinside.com 2019 - 2024. All rights reserved.