【问题标题】:R: combining matrices each time a row from one matrix with all rows in another matrixR:每次将一个矩阵中的一行与另一个矩阵中的所有行组合起来
【发布时间】:2015-06-30 19:38:23
【问题描述】:

我有 2 个矩阵(expmatmat)。 假设expmat

 [1,]   -1   -1   -1   -1   -1
 [2,]    1   -1   -1   -1   -1
 [3,]   -1    1   -1   -1   -1
 [4,]    1    1   -1   -1   -1
 [5,]   -1   -1    1   -1   -1
 [6,]    1   -1    1   -1   -1
 [7,]   -1    1    1   -1   -1
 [8,]    1    1    1   -1   -1

mat

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

我想创建一个循环,在每个循环中,我将 expmat 中的一行连接到 mat 中的所有行,以便最后创建 8 个矩阵,并且每个矩阵中的前 5 列完全相同(行来自expmat) 和其他列发生变化,因为它们来自垫子。例如,给定示例的前 2 个矩阵将显示为

Matrix1
-1   -1   -1   -1   -1   -2   -2   -2   -2   -2
-1   -1   -1   -1   -1    2   -2   -2   -2   -2
-1   -1   -1   -1   -1   -2    2   -2   -2   -2
-1   -1   -1   -1   -1    2    2   -2   -2   -2
-1   -1   -1   -1   -1   -2   -2    2   -2   -2
-1   -1   -1   -1   -1    2   -2    2   -2   -2
-1   -1   -1   -1   -1   -2    2    2   -2   -2

Matrix 2
1   -1   -1   -1   -1   -2   -2   -2   -2   -2
1   -1   -1   -1   -1    2   -2   -2   -2   -2
1   -1   -1   -1   -1   -2    2   -2   -2   -2
1   -1   -1   -1   -1    2    2   -2   -2   -2
1   -1   -1   -1   -1   -2   -2    2   -2   -2
1   -1   -1   -1   -1    2   -2    2   -2   -2
1   -1   -1   -1   -1   -2    2    2   -2   -2

这就是我正在做的:

for(row in 1:nrow(expmat)) {
for(row in 1:nrow(expmat)) {
val<-expmat[row,]
val<-as.matrix(val)
dshybrid=merge(t(val),mat, by=0, all=TRUE)
print(dshybrid)}

但是我得到了需要的东西

-1   -1   -1   -1   -1   -2   -2   -2   -2   -2
NA     NA     NA     NA     NA   2   -2   -2   -2   -2
NA     NA     NA     NA     NA   -2    2   -2   -2   -2
NA     NA     NA     NA     NA    2    2   -2   -2   -2
NA     NA     NA     NA     NA   -2   -2    2   -2   -2
NA     NA     NA     NA     NA    2   -2    2   -2   -2
NA     NA     NA     NA     NA   -2    2    2   -2   -2
....

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    这种方法可以解决问题:

    lapply(split(expmat, row(expmat)), function(u){
      cbind(matrix(rep(u,nrow(mat)), ncol=ncol(mat), byrow=T), mat)
    })
    

    基本上split 将列出expmat 行,然后对每一行复制7 次并与mat 矩阵合并。这将为您提供 8 个所需的矩阵。

    【讨论】:

      【解决方案2】:

      循环遍历expmatcbind的每一行,将其转换为mat

      lapply(1:nrow(expmat), function(x) cbind(expmat[rep(x,nrow(mat)),],mat) )
      

      rep 是必需的,以便 expmat 的单行对于要加入的 mat 的每一行重复。例如,举一个非常简单的例子:

      expmat <- matrix(1:4,nrow=2)
      mat    <- matrix(5:8,nrow=2)
      lapply(1:nrow(expmat), function(x) cbind(expmat[rep(x,nrow(mat)),],mat) )
      
      #[[1]]
      #     [,1] [,2] [,3] [,4]
      #[1,]    1    3    5    7
      #[2,]    1    3    6    8
      #
      #[[2]]
      #     [,1] [,2] [,3] [,4]
      #[1,]    2    4    5    7
      #[2,]    2    4    6    8
      

      【讨论】:

        猜你喜欢
        • 2017-09-10
        • 1970-01-01
        • 1970-01-01
        • 2019-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多