首页 文章

使用向量的子集矩阵

提问于
浏览
1

所以,我认为这可能是一个基本问题,但在这里 . 想象一下,我有以下矩阵:

> 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

我想要做的是使用此向量对矩阵进行子集化 . 意思是,我想使用向量从矩阵中获取前五行,然后是接下来的五行,依此类推 . 我试图使用子集函数,但我无法使它工作(它给我一个错误说该子集必须是逻辑的) .

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

2 回答

  • 2

    这是一个选项:

    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

    作为一般响应,假设您有一个包含 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 为您的示例以获取子矩阵

相关问题