从矩阵中提取一系列连续向量

时间:2017-07-22 15:34:30

标签: r matrix vector

我有一个大矩阵,简化说:

> mat = matrix(c(1:50), ncol = 5)
> mat
      [,1] [,2] [,3] [,4] [,5]
 [1,]    1   11   21   31   41
 [2,]    2   12   22   32   42
 [3,]    3   13   23   33   43
 [4,]    4   14   24   34   44
 [5,]    5   15   25   35   45
 [6,]    6   16   26   36   46
 [7,]    7   17   27   37   47
 [8,]    8   18   28   38   48
 [9,]    9   19   29   39   49
[10,]   10   20   30   40   50

我想连续提取所有可能的垂直向量,这些向量由每列中的3个元素组成,例如: (1,2,3),(2,3,4),...,(11,12,13),(12,13,14),...并生成由X组成的3×X矩阵所有这些载体。 看起来像这样的东西:

      [,1] [,2] [,3] 
 [1,]    1   2   3 
 [2,]    2   3   4 
 [3,]    3   4   5 
 etc.    .   .   . 
 [5,]    11   12   13 
 [6,]    12   13   14 
 [7,]    13   14   15 
 etc.    ..   ..   .. 
 [9,]    21   22   23 
[10,]    22   23   24 

我尝试使用lapply和cbind函数,以及更通用的for循环,但它显示“不正确的维数”。谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

喜欢这个吗?

  

编辑:根据格洛腾迪克的评论建议,将功能从'print'修改为'c'在rollapply内。

user_response = JSON.parse(response.body, symbolize_names: true)

答案 1 :(得分:2)

我们可以使用base R

执行此操作
do.call(rbind, lapply(as.data.frame(mat), embed, 3))[,3:1]
#       [,1] [,2] [,3]
# [1,]    1    2    3
# [2,]    2    3    4
# [3,]    3    4    5
# [4,]    4    5    6
# [5,]    5    6    7
# [6,]    6    7    8
# [7,]    7    8    9
# [8,]    8    9   10
# [9,]   11   12   13
#[10,]   12   13   14
#[11,]   13   14   15
#[12,]   14   15   16
#[13,]   15   16   17
#[14,]   16   17   18
#[15,]   17   18   19
#[16,]   18   19   20
#[17,]   21   22   23
#[18,]   22   23   24
#[19,]   23   24   25
#[20,]   24   25   26
#[21,]   25   26   27
#[22,]   26   27   28
#[23,]   27   28   29
#[24,]   28   29   30
#[25,]   31   32   33
#[26,]   32   33   34
#[27,]   33   34   35
#[28,]   34   35   36
#[29,]   35   36   37
#[30,]   36   37   38
#[31,]   37   38   39
#[32,]   38   39   40
#[33,]   41   42   43
#[34,]   42   43   44
#[35,]   43   44   45
#[36,]   44   45   46
#[37,]   45   46   47
#[38,]   46   47   48
#[39,]   47   48   49
#[40,]   48   49   50