我想做一些像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中有没有有效的方法呢?
答案 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