使用向量

时间:2018-03-26 12:47:47

标签: r subset

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

> 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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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以获取子矩阵