在R中复制矩阵的行

时间:2013-11-21 09:49:41

标签: 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) }。例如:

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

,但现实世界中{{1}}的行号通常很大。有没有有效的方法来做到这一点?

2 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:1)

> 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