【问题标题】:Extend by adding rows to a matrix in R with the same pattern通过将行添加到具有相同模式的 R 中的矩阵来扩展
【发布时间】:2014-07-18 09:54:44
【问题描述】:

我有矩阵,但想用相同的模式扩展它。请注意,它可以扩展到任何给定数量的行和列,并且通常不是正方形

    04/06/2012  11/06/2012  18/06/2012  25/06/2012  02/07/2012
26/03/2012  10  11  12  13  14
02/04/2012  9   10  11  12  13
09/04/2012  8   9   10  11  12
16/04/2012  7   8   9   10  11
23/04/2012  6   7   8   9   10
30/04/2012  5   6   7   8   9
07/05/2012  4   5   6   7   8
14/05/2012  3   4   5   6   7
21/05/2012  2   3   4   5   6
28/05/2012  1   2   3   4   5

即我想把它扩展成这样:

    04/06/2012  11/06/2012  18/06/2012  25/06/2012  02/07/2012
26/03/2012  10  11  12  13  14
02/04/2012  9   10  11  12  13
09/04/2012  8   9   10  11  12
16/04/2012  7   8   9   10  11
23/04/2012  6   7   8   9   10
30/04/2012  5   6   7   8   9
07/05/2012  4   5   6   7   8
14/05/2012  3   4   5   6   7
21/05/2012  2   3   4   5   6
28/05/2012  1   2   3   4   5
04/06/2012  0   1   2   3   4
11/06/2012  NA  0   1   2   3
18/06/2012  NA  NA  0   1   2
25/06/2012  NA  NA  NA  0   1
02/07/2012  NA  NA  NA  NA  0

【问题讨论】:

    标签: r matrix sequence


    【解决方案1】:

    我确信有一个聪明的方法可以用Reduce 或其他东西来做到这一点,但这就是我想到的:

    lengthOut <- 6   ## Set to one less than the number of columns you want to create
    startAt <- 10    ## Set the maximum value of the FIRST column
    vapply(c(0, sequence(lengthOut)), function(x) { 
      x <- (startAt + x):0                   # Create a sequence in the normal manner
      length(x) <- startAt + lengthOut + 1   # Extend the length of that sequence
      x
    }, numeric(startAt + lengthOut + 1))     # Specify what to return
    #       [,1] [,2] [,3] [,4] [,5] [,6] [,7]
    #  [1,]   10   11   12   13   14   15   16
    #  [2,]    9   10   11   12   13   14   15
    #  [3,]    8    9   10   11   12   13   14
    #  [4,]    7    8    9   10   11   12   13 
    #  [5,]    6    7    8    9   10   11   12
    #  [6,]    5    6    7    8    9   10   11
    #  [7,]    4    5    6    7    8    9   10
    #  [8,]    3    4    5    6    7    8    9
    #  [9,]    2    3    4    5    6    7    8
    # [10,]    1    2    3    4    5    6    7
    # [11,]    0    1    2    3    4    5    6
    # [12,]   NA    0    1    2    3    4    5
    # [13,]   NA   NA    0    1    2    3    4
    # [14,]   NA   NA   NA    0    1    2    3
    # [15,]   NA   NA   NA   NA    0    1    2
    # [16,]   NA   NA   NA   NA   NA    0    1
    # [17,]   NA   NA   NA   NA   NA   NA    0
    

    【讨论】:

      【解决方案2】:

      这是另一种方法

      x <- 16:0
      matrix(c(sapply(6:1, function(z) rep(lead(x, z))), x), ncol=7)
      
      #      [,1] [,2] [,3] [,4] [,5] [,6] [,7]
      #[1,]   10   11   12   13   14   15   16
      #[2,]    9   10   11   12   13   14   15
      #[3,]    8    9   10   11   12   13   14
      #[4,]    7    8    9   10   11   12   13
      #[5,]    6    7    8    9   10   11   12
      #[6,]    5    6    7    8    9   10   11
      #[7,]    4    5    6    7    8    9   10
      #[8,]    3    4    5    6    7    8    9
      #[9,]    2    3    4    5    6    7    8
      #[10,]    1    2    3    4    5    6    7
      #[11,]    0    1    2    3    4    5    6
      #[12,]   NA    0    1    2    3    4    5
      #[13,]   NA   NA    0    1    2    3    4
      #[14,]   NA   NA   NA    0    1    2    3
      #[15,]   NA   NA   NA   NA    0    1    2
      #[16,]   NA   NA   NA   NA   NA    0    1
      #[17,]   NA   NA   NA   NA   NA   NA    0
      

      编辑:忘了说我用了dplyr::lead

      【讨论】:

        【解决方案3】:

        不确定这是否有帮助:

        m1 <- matrix(rep(10:1,each=7)+0:6,ncol=7,byrow=T)
        m2 <- matrix(NA,ncol=7,nrow=7)
        indx <- 0:6+rep(c(0:-6),each=7)
        
        m2[lower.tri(m2, diag=TRUE)] <- indx[indx>=0]
        rbind(m1,t(m2))
        #       [,1] [,2] [,3] [,4] [,5] [,6] [,7]
        # [1,]   10   11   12   13   14   15   16
        # [2,]    9   10   11   12   13   14   15
        # [3,]    8    9   10   11   12   13   14
        # [4,]    7    8    9   10   11   12   13
        # [5,]    6    7    8    9   10   11   12
        # [6,]    5    6    7    8    9   10   11
        # [7,]    4    5    6    7    8    9   10
        # [8,]    3    4    5    6    7    8    9
        # [9,]    2    3    4    5    6    7    8
        # [10,]   1    2    3    4    5    6    7
        # [11,]   0    1    2    3    4    5    6
        # [12,]  NA    0    1    2    3    4    5
        # [13,]  NA   NA    0    1    2    3    4
        # [14,]  NA   NA   NA    0    1    2    3
        # [15,]  NA   NA   NA   NA    0    1    2
        # [16,]  NA   NA   NA   NA   NA    0    1
        # [17,]  NA   NA   NA   NA   NA   NA    0
        

        【讨论】:

          猜你喜欢
          • 2014-07-19
          • 1970-01-01
          • 2016-06-03
          • 1970-01-01
          • 1970-01-01
          • 2011-06-09
          • 2021-03-16
          • 2022-01-03
          • 1970-01-01
          相关资源
          最近更新 更多