从矢量滚动窗口创建矩阵

时间:2017-07-05 14:48:45

标签: r

我想做一些像this question但在R。

的事情

假设:

> my_vector
[1] 1 2 3 4 5 6

window_size = 3,我想得到以下矩阵:

> my_matrix
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    2    3    4
[3,]    3    4    5
[4,]    4    5    6

如您所见,矩阵的每一行都是向量的一个窗口。

在没有for循环的R中有没有有效的方法呢?

3 个答案:

答案 0 :(得分:2)

我们可以使用embed

apply(embed(my_vector, 4), 1, rev)
#     [,1] [,2] [,3]
#[1,]    1    2    3
#[2,]    2    3    4
#[3,]    3    4    5
#[4,]    4    5    6

或者可以将其修改为

t(embed(rev(my_vector), 4))[, 3:1]

或@lmo建议

embed(my_vector, 3)[, 3:1]

matrix

matrix(my_vector, 7, 3)[1:4,]

答案 1 :(得分:1)

sapply(1:3, function(i) my_vector[i:(i+3)])
#     [,1] [,2] [,3]
#[1,]    1    2    3
#[2,]    2    3    4
#[3,]    3    4    5
#[4,]    4    5    6

答案 2 :(得分:1)

这可以在动物园中使用rollapply完成:

library(zoo)

rollapply(my_vector, 3, c)

,并提供:

     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    2    3    4
[3,]    3    4    5
[4,]    4    5    6

注意:上面以可重现的形式使用的输入是:

my_vector <- 1:6