2017-07-05 27 views
1

矩陣我想這樣做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中執行?

回答

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,] 
+2

小修改嵌入(1:6,3)[,3:1]'。 – lmo

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 
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