【问题标题】:How to concatenate column repetitions of a matrix without a for loop如何在没有for循环的情况下连接矩阵的列重复
【发布时间】:2017-03-21 01:02:05
【问题描述】:

假设我有以下矩阵:

     [,1] [,2]
[1,]    1    2
[2,]    3    4
[3,]    5    6

我想生成一个矩阵,它是通过重复每列k 次生成的矩阵的串联(按列)。比如k=3,下面就是我想要得到的:

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    1    1    2    2    2
[2,]    3    3    3    4    4    4
[3,]    5    5    5    6    6    6

没有 for 循环我该怎么做?

【问题讨论】:

    标签: r matrix concatenation


    【解决方案1】:

    您可以通过列索引来做到这一点。 rep 函数可以方便地重复每个列号正确的次数:

    mat[,rep(seq_len(ncol(mat)), each=3)]
    #      [,1] [,2] [,3] [,4] [,5] [,6]
    # [1,]    1    1    1    2    2    2
    # [2,]    3    3    3    4    4    4
    # [3,]    5    5    5    6    6    6
    

    在上面的表达式中,seq_len(ncol(mat)) 是从 1 到矩阵中列数的序列(你可以把它想象成 1:ncol(mat),除了它很好地处理了一些特殊情况,比如 0 列矩阵)。

    数据:

    (mat <- matrix(1:6, nrow=3, byrow = TRUE))
    #      [,1] [,2]
    # [1,]    1    2
    # [2,]    3    4
    # [3,]    5    6
    

    【讨论】:

      【解决方案2】:

      我们可以重复矩阵k 的每个元素,并将向量拟合到一个矩阵中,其中列数是k 乘以原始值。

      k <- 3
      matrix(rep(t(mat), each = k), ncol = ncol(mat) * k, byrow = TRUE)
      
      #     [,1] [,2] [,3] [,4] [,5] [,6]
      #[1,]    1    1    1    2    2    2
      #[2,]    3    3    3    4    4    4
      #[3,]    5    5    5    6    6    6
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-06
        • 2016-10-31
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 2015-06-23
        • 2018-09-30
        相关资源
        最近更新 更多