我们说我有以下矩阵:
[,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循环的情况下 ?
答案 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