2014-07-22 24 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