2014-07-22 80 views
4

有沒有更快的方法來獲取矢量並將其轉換爲10列矩陣,如下面的輸出中所示?如何使用單個矢量創建具有多個列的矩陣

我有一個向量9000個元素,我試圖創建200列,從最近的觀察到它以前的200個觀察,向後逐一列。

在下面的例子中,數字10表示矢量中的第10個obs,第9個表示第9個obs,...,數字1表示矢量中的第一個觀察值。

 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] 10 9 8 7 6 5 4 3 2  1 
[2,] 11 10 9 8 7 6 5 4 3  2 
[3,] 12 11 10 9 8 7 6 5 4  3 
[4,] 13 12 11 10 9 8 7 6 5  4 
[5,] 14 13 12 11 10 9 8 7 6  5 
[6,] 15 14 13 12 11 10 9 8 7  6 
[7,] 16 15 14 13 12 11 10 9 8  7 
[8,] 17 16 15 14 13 12 11 10 9  8 
[9,] 18 17 16 15 14 13 12 11 10  9 
[10,] 19 18 17 16 15 14 13 12 11 10 
[11,] 20 19 18 17 16 15 14 13 12 11 

    a<-1:20 
    z<-cbind(
     a1<-a[-c(1:9)], 
     a2<-a[-c(1:8,length(a))], 
     a3<-a[-c(1:7,length(a)-1,length(a))], 
     a4<-a[-c(1:6,(length(a)-2):length(a))], 
     a5<-a[-c(1:5,(length(a)-3):length(a))], 
     a6<-a[-c(1:4,(length(a)-4):length(a))], 
     a7<-a[-c(1:3,(length(a)-5):length(a))], 
     a8<-a[-c(1:2,(length(a)-6):length(a))], 
     a9<-a[-c(1,(length(a)-7):length(a))], 
     a10<-a[-c((length(a)-8):length(a))] 
    ) 
    z 

我對40列做了同樣的事情,但我無法想象爲200列做同樣的事情。

任何幫助將不勝感激。謝謝你在前進

a<-1:100 
z<-cbind(
    a1<-a[-c(1:39)], 
    a2<-a[-c(1:38,length(a))], 
    a3<-a[-c(1:37,length(a)-1,length(a))], 
    a4<-a[-c(1:36,(length(a)-2):length(a))], 
    a5<-a[-c(1:35,(length(a)-3):length(a))], 
    a6<-a[-c(1:34,(length(a)-4):length(a))], 
    a7<-a[-c(1:33,(length(a)-5):length(a))], 
    a8<-a[-c(1:32,(length(a)-6):length(a))], 
    a9<-a[-c(1:31,(length(a)-7):length(a))], 
    a10<-a[-c(1:30,(length(a)-8):length(a))], 

    a11<-a[-c(1:29,(length(a)-9):length(a))], 
    a12<-a[-c(1:28,(length(a)-10):length(a))], 
    a13<-a[-c(1:27,(length(a)-11):length(a))], 
    a14<-a[-c(1:26,(length(a)-12):length(a))], 
    a15<-a[-c(1:25,(length(a)-13):length(a))], 
    a16<-a[-c(1:24,(length(a)-14):length(a))], 
    a17<-a[-c(1:23,(length(a)-15):length(a))], 
    a18<-a[-c(1:22,(length(a)-16):length(a))], 
    a19<-a[-c(1:21,(length(a)-17):length(a))], 
    a20<-a[-c(1:20,(length(a)-18):length(a))], 

    a21<-a[-c(1:19,(length(a)-19):length(a))], 
    a22<-a[-c(1:18,(length(a)-20):length(a))], 
    a23<-a[-c(1:17,(length(a)-21):length(a))], 
    a24<-a[-c(1:16,(length(a)-22):length(a))], 
    a25<-a[-c(1:15,(length(a)-23):length(a))], 
    a26<-a[-c(1:14,(length(a)-24):length(a))], 
    a27<-a[-c(1:13,(length(a)-25):length(a))], 
    a28<-a[-c(1:12,(length(a)-26):length(a))], 
    a29<-a[-c(1:11,(length(a)-27):length(a))], 
    a30<-a[-c(1:10,(length(a)-28):length(a))], 

    a31<-a[-c(1:9,(length(a)-29):length(a))], 
    a32<-a[-c(1:8,(length(a)-30):length(a))], 
    a33<-a[-c(1:7,(length(a)-31):length(a))], 
    a34<-a[-c(1:6,(length(a)-32):length(a))], 
    a35<-a[-c(1:5,(length(a)-33):length(a))], 
    a36<-a[-c(1:4,(length(a)-34):length(a))], 
    a37<-a[-c(1:3,(length(a)-35):length(a))], 
    a38<-a[-c(1:2,(length(a)-36):length(a))], 
    a39<-a[-c(1,(length(a)-37):length(a))], 
    a40<-a[-c((length(a)-38):length(a))] 
) 
z 

回答

5

我認爲embed()將是有用的:

x <- 1:9000 
m <- embed(x,200) 
m <- m[,rev(seq(ncol(m)))] ## reverse columns 
7

這裏有一個可能性:

m <- matrix(nrow=11, ncol=10) 
ncol(m) - col(m) + row(m) 
#  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
# [1,] 10 9 8 7 6 5 4 3 2  1 
# [2,] 11 10 9 8 7 6 5 4 3  2 
# [3,] 12 11 10 9 8 7 6 5 4  3 
# [4,] 13 12 11 10 9 8 7 6 5  4 
# [5,] 14 13 12 11 10 9 8 7 6  5 
# [6,] 15 14 13 12 11 10 9 8 7  6 
# [7,] 16 15 14 13 12 11 10 9 8  7 
# [8,] 17 16 15 14 13 12 11 10 9  8 
# [9,] 18 17 16 15 14 13 12 11 10  9 
# [10,] 19 18 17 16 15 14 13 12 11 10 
# [11,] 20 19 18 17 16 15 14 13 12 11