代码之家  ›  专栏  ›  技术社区  ›  João Carvalho

使用向量的子集矩阵

  •  1
  • João Carvalho  · 技术社区  · 7 年前

    所以,我认为这可能是一个基本的问题,但问题来了。假设我有以下矩阵:

    > str(MatrixA)
    num [1:20, 1:127] 1 3 2 1 1 2 2 4 1 2 ...
    

    基本上是一个有20行127列的矩阵,每个条目都是一个正整数。我还有以下向量:

    > n
    [1] 5 5 5 5
    

    我想做的是使用这个向量对矩阵进行子集划分。意思是,我想用向量从矩阵中得到前五行,然后是下五行,依此类推。我尝试使用subset函数,但无法使其工作(它给了我一个错误,即子集必须是逻辑的)。

    任何帮助都将不胜感激,谢谢!

    2 回复  |  直到 7 年前
        1
  •  2
  •   Julius Vainora    7 年前

    这里有一个选项:

    M <- matrix(rnorm(2 * 5), nrow = 5, ncol = 2)
    n <- c(2, 1, 2)
    Map(function(i, j) M[(i - j + 1):i, , drop = FALSE], cumsum(n), n)
    # [[1]]
    #            [,1]       [,2]
    # [1,] -0.2080075 -0.0146956
    # [2,] -1.5513436  0.2253790
    #
    # [[2]]
    #        [,1]       [,2]
    # [1,] 0.8447 -0.4891574
    #
    # [[3]]
    #           [,1]       [,2]
    # [1,] 0.4916745  1.4980913
    # [2,] 0.4789787 -0.3118559
    
        2
  •  2
  •   R18    7 年前

    一般来说,假设你有一个矩阵 nrow 行,并且要按每个行创建子集 k 行。然后,可以使用以下代码:

    # A sequence until `nrow` every `k` units
      s <- seq(0, nrow, by = k)
    # Every, . . . (5 rows)
      k <- 5
    # Build M1, . . ., Mk sub-matrices
      for (i in 1:ceiling(nrow/k)){
         assign(paste("M",i,sep ="") ,M[(s[i] + 1): s[i+1],])
    
      }
    

    现在你只需要打电话 M1 M4 以获取子矩阵为例