在R中复制矩阵的行

cog*_*ita 3 r matrix

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

m = matrix(1:6, nrow = 3)
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
v = c(3, 1, 2)
Run Code Online (Sandbox Code Playgroud)

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  
Run Code Online (Sandbox Code Playgroud)

一个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]
}
Run Code Online (Sandbox Code Playgroud)

,但m现实世界中的行数通常很大.有没有有效的方法来做到这一点?

Jul*_*ora 14

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
Run Code Online (Sandbox Code Playgroud)