将矩阵的每一行与另一个矩阵R的每一个元素连接起来
我想把一个矩阵的每一行(比如m1)和另一个矩阵(m2)的每一个元素连接起来。下面是一个示例:将矩阵的每一行与另一个矩阵R的每一个元素连接起来,r,matrix,concatenation,R,Matrix,Concatenation,我想把一个矩阵的每一行(比如m1)和另一个矩阵(m2)的每一个元素连接起来。下面是一个示例: m1 <- t(combn(4,2)) m2 <- matrix(NA,nrow(m1),2) for(i in 1:nrow(m1)){ m2[i,] <- seq(1,4,1)[-c(m1[i,])] } > m1 [,1] [,2] [1,] 1 2 [2,] 1 3 [3,] 1 4 [4,] 2
m1 <- t(combn(4,2))
m2 <- matrix(NA,nrow(m1),2)
for(i in 1:nrow(m1)){
m2[i,] <- seq(1,4,1)[-c(m1[i,])]
}
> m1
[,1] [,2]
[1,] 1 2
[2,] 1 3
[3,] 1 4
[4,] 2 3
[5,] 2 4
[6,] 3 4
> m2
[,1] [,2]
[1,] 3 4
[2,] 2 4
[3,] 2 3
[4,] 1 4
[5,] 1 3
[6,] 1 2
在这种情况下,最佳做法是什么 根据预期的输出,逻辑似乎是我们正在通过同时包含第二个数据集来扩展第一个数据集的行,因此行数应该是第一个数据集的两倍。在当前方法中,我们使用
rep
展开行,然后使用从第二个矩阵创建的向量展开cbind
cbind(m1[rep(1:nrow(m1), each = 2),], c(t(m2)))
# [,1] [,2] [,3]
# [1,] 1 2 3
# [2,] 1 2 4
# [3,] 1 3 2
# [4,] 1 3 4
# [5,] 1 4 2
# [6,] 1 4 3
# [7,] 2 3 1
# [8,] 2 3 4
# [9,] 2 4 1
#[10,] 2 4 3
#[11,] 3 4 1
#[12,] 3 4 2
即使两个矩阵的列数不相同,这种方法也能很好地工作,每个选项都能解决后一个问题。谢谢
cbind(m1[rep(1:nrow(m1), each = 2),], c(t(m2)))
# [,1] [,2] [,3]
# [1,] 1 2 3
# [2,] 1 2 4
# [3,] 1 3 2
# [4,] 1 3 4
# [5,] 1 4 2
# [6,] 1 4 3
# [7,] 2 3 1
# [8,] 2 3 4
# [9,] 2 4 1
#[10,] 2 4 3
#[11,] 3 4 1
#[12,] 3 4 2