复制R中矩阵的行 [英] Replicate rows of a matrix in R

查看:164
本文介绍了复制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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆