如何使用单个向量创建具有多列的矩阵

时间:2014-07-22 02:05:28

标签: r

是否有更快的方法来获取矢量并将其转换为10列矩阵,如下面的输出?

我有一个9000个元素的向量,我正在尝试创建200个列,从最近的观察到之前的200个观察,每个列向后移动。

在下面的例子中,数字10代表向量中的第10个障碍,9代表第9个障碍,......,数字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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:5)

我认为embed()会很有用:

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