【问题标题】:Replicate rows of a matrix in R在 R 中复制矩阵的行
【发布时间】:2013-11-21 09:49:41
【问题描述】:

假设我有一个矩阵m 和一个正整数向量v,我想做的是得到一个新矩阵m_new 并且m 的每一行(比如m[i, ])都由@ 复制987654326@ 次m_new。例如:

m = matrix(1:6, nrow = 3)
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
v = c(3, 1, 2)

m_new 应该是:

     [,1] [,2]
[1,]    1    4  # m[1, ] is replicated by
[2,]    1    4  # v[1] = 3
[3,]    1    4  # times
[4,]    2    5   
[5,]    3    6  
[6,]    3    6  

for 循环将适用于小案例:

m_new = matrix(0, sum(v), ncol(m))
k = 1
for(i in 1:nrow(m)){
    for(j in k:(k+v[i]-1)){
        m_new[j, ] = m[i, ]
    }
    k = k + v[i]
}

,但现实世界中m 的行数通常很大。有什么有效的方法吗?

【问题讨论】:

    标签: r matrix


    【解决方案1】:
    m[rep(1:nrow(m), times = v), ]
    #      [,1] [,2]
    # [1,]    1    4
    # [2,]    1    4
    # [3,]    1    4
    # [4,]    2    5
    # [5,]    3    6
    # [6,]    3    6
    

    【讨论】:

    • 这太美了!
    【解决方案2】:
    > m <- matrix(1:25, ncol=5)
    
    > m
         [,1] [,2] [,3] [,4] [,5]
    [1,]    1    6   11   16   21
    [2,]    2    7   12   17   22
    [3,]    3    8   13   18   23
    [4,]    4    9   14   19   24
    [5,]    5   10   15   20   25
    
    > apply(m, 2, function(c) rep(c,v))
    
          [,1] [,2] [,3] [,4] [,5]
     [1,]    1    6   11   16   21
     [2,]    2    7   12   17   22
     [3,]    2    7   12   17   22
     [4,]    3    8   13   18   23
     [5,]    3    8   13   18   23
     [6,]    3    8   13   18   23
     [7,]    4    9   14   19   24
     [8,]    4    9   14   19   24
     [9,]    4    9   14   19   24
    [10,]    4    9   14   19   24
    [11,]    5   10   15   20   25
    [12,]    5   10   15   20   25
    [13,]    5   10   15   20   25
    [14,]    5   10   15   20   25
    [15,]    5   10   15   20   25
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-06
      • 2012-10-13
      • 2020-02-08
      • 2016-08-30
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多