复制R中矩阵的行 [英] Replicate rows of a matrix in R
本文介绍了复制R中矩阵的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我有一个矩阵m
和一个正整数矢量v
,我想做的就是得到一个新的矩阵m_new
,并且m
的每一行(比如说m[i, ]
)都被复制为<m_new
中的c5>次.例如:
Suppose I have a matrix m
and a positive integer vector v
, what I want to do is get a new matrix m_new
and each row of m
(say m[i, ]
) are replicated by v[i]
times in m_new
. For example:
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
循环将使其用于小情况:
A for
loop will make it for the small case:
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
的行数通常很大.有什么有效的方法吗?
, but the row number of m
in real world is usually big. Is there any effient way to do this?
推荐答案
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
这篇关于复制R中矩阵的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文