如何在没有for循环的情况下连接矩阵的列重复

时间:2017-03-21 01:02:05

标签: r matrix concatenation

我们说我有以下矩阵:

     [,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循环的情况下

2 个答案:

答案 0 :(得分:5)

您可以使用列索引执行此操作。正确重复每个列号的便捷方法是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

答案 1 :(得分: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