簡體   English   中英

在R中復制矩陣的行

[英]Replicate rows of a matrix in R

假設我有一個矩陣m和一個正整數向量v ,我想要做的是得到一個新的矩陣m_newm每一行(比如m[i, ] )在m_newv[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的行數通常很大。 有沒有有效的方法來做到這一點?

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
> 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM