2017-07-05 9 views
1

から行列を作成します。私は ベクトルのローリング・ウィンドウ

R.

this questionようですが、中に何かをしたいと思い考える:

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

> my_vector 
[1] 1 2 3 4 5 6 

そしてwindow_size = 3が、私は次の行列を取得したいと思い

ご覧のとおり、行列の各行はベクトルのウィンドウです。

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 

使用することができますまたは@lmoが

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

を示唆したよう

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

に変更したりすることができます

またはこれは動物園でrollapplyを用いて行うことができるmatrix

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

マイナー修正 'embed(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

有する:

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 
関連する問題