【问题标题】:Combine matrices with different arrays using loop FOR in R在 R 中使用循环 FOR 将矩阵与不同的数组组合
【发布时间】:2021-05-22 17:03:16
【问题描述】:

我需要模拟数据以获得所有可能的损失组合。 我需要使用多个具有不同维度的矩阵组合一个矩阵。我已经做了这些步骤:

  1. g <- matrix(data=0, nrow=rows, ncol=columns)
    我已经制作了一个矩阵,我需要用零填充所有维度(在本例中:行 = 7,列 = 3,但最后我将使用更多行,大约 1000)
  2. 然后我使用“for 循环”来查找所有可能的损失组合:
for (i in 1:length) {
    g <- (combinations(length, i, data$loss_prncp, repeats.allowed = FALSE))
    if(length<i) {
      next
    }
    print(g)

  }

在这种情况下,length = 3, data$loss_prncp 是一个包含 3 个数量的数据列:631.91; 16693.12; 8784.44。 最后我得到了三个矩阵:

     [,1]    [,2]     [,3]
[1,] 631.91 8784.44 16693.12
        [,1]     [,2]
[1,]  631.91  8784.44
[2,]  631.91 16693.12
[3,] 8784.44 16693.12
         [,1]
[1,]   631.91
[2,]  8784.44
[3,] 16693.12

但实际上,循环只保存最后一个值:

       [,1]
[1,]   631.91
[2,]  8784.44
[3,] 16693.12

如何通过在缺失的列中插入零来将这三个矩阵合并为一个?

这是我最后需要得到的:

      [,1]     [,2]     [,3]
[1,]   631.91    0        0
[2,]  8784.44    0        0
[3,] 16693.12    0        0
[4,]  631.91   8784.44    0
[5,]  631.91  16693.12    0
[6,] 8784.44  16693.12    0
[7,] 631.91   8784.44   16693.12

【问题讨论】:

    标签: r arrays matrix combinations


    【解决方案1】:

    这样的?

    src <- c(1, 2, 3, 4)
    len <- length(src)
    acc <- list()
    
    for (i in 1:len) {
      c <- t(combn(src, i))
      zeros <- matrix(0, nrow = dim(c)[1], ncol = len - i)
      acc[[i]] <- cbind(c, zeros)
    }
    
    do.call(rbind, acc)
    

    输出:

          [,1] [,2] [,3] [,4]
     [1,]    1    0    0    0
     [2,]    2    0    0    0
     [3,]    3    0    0    0
     [4,]    4    0    0    0
     [5,]    1    2    0    0
     [6,]    1    3    0    0
     [7,]    1    4    0    0
     [8,]    2    3    0    0
     [9,]    2    4    0    0
    [10,]    3    4    0    0
    [11,]    1    2    3    0
    [12,]    1    2    4    0
    [13,]    1    3    4    0
    [14,]    2    3    4    0
    [15,]    1    2    3    4
    

    解释:

    1. combn 产生一个组合矩阵(尽管与你想要的不同,所以用t 转置)
    2. 制作一个零矩阵,其中行数 = 组合数和列数 = 总长度 - 本次迭代的组合长度
    3. 按列绑定
    4. 在循环之外,逐行绑定每次迭代的所有累积矩阵。

    顺便说一句,我查看了您正在使用的 combinations 函数,但我不确定您是否需要内置 combn 函数,这就是我使用它的原因。 combn 只是给你一定长度的所有组合,这就是你想要的。

    【讨论】:

    • 有效!万分感谢! @petrucci4prez
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2021-12-07
    • 2021-01-27
    • 2020-02-18
    相关资源
    最近更新 更多