有没有更快的方法来获取一个向量并将其转换为一个 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

最佳答案

我认为 embed() 会很有用:

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

关于r - 如何使用单个向量创建具有多列的矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24877782/

10-12 17:10
查看更多