如何添加列以扩展R中的矩阵

djh*_*ing 6 r matrix

对不起,我想不出一个更具信息性的标题,但这是我的挑战.我有一个矩阵,我需要根据向量描述的参数在特定位置添加列.例如,如果我有以下矩阵:

1, 0, 1, 2, 0
0, 0, 1, 1, 1
1, 1, 0, 0, 0
2, 0, 1, 0, 2
Run Code Online (Sandbox Code Playgroud)

但对于特定的R包(未标记),我需要在特定位置添加NA列.我有一个与矩阵中的列相关的向量:

1, 1, 1, 2, 3
Run Code Online (Sandbox Code Playgroud)

这表明第1-3列来自相同的采样周期,第4列和第5列来自不同的采样周期.我需要使矩阵中的列数等于相同采样周期中的最大数量乘以采样周期数.在这种情况下,有三个1(向量中任何唯一值的最大数量)和总共三个采样周期(向量中的最大数量).所以我需要一个9列(3 x 3)的矩阵.具体来说,我需要在第4和第5列之后添加新的NAs列.基本上,我只需要的NA的列是占位符具有一个矩阵,其中观察(每列)的数量是相同的(= 3)为每个采样周期(在载体中通过数表示).这很难描述,但在这个想象的例子中,我想最终得到:

1, 0, 1, 2, NA, NA, 0, NA, NA
0, 0, 1, 1, NA, NA, 1, NA, NA
1, 1, 0, 0, NA, NA, 0, NA, NA
2, 0, 1, 0, NA, NA, 2, NA, NA
Run Code Online (Sandbox Code Playgroud)

这将由一个看起来像这样的矢量来描述:

1, 1, 1, 2, 2, 2, 3, 3, 3
Run Code Online (Sandbox Code Playgroud)

虽然我实际上并不需要生成那个矢量,只需要生成矩阵.显然,在这种情况下很容易添加这些列,但对于我的数据,我有一个更大的矩阵,最终会有~200列.另外,我可能不得不为大量数据集执行此操作.

任何人都可以帮我一个在R中编码的方法,这样我就可以自动化扩展矩阵的过程吗?

感谢您的任何建议或意见!


编辑:为了使事情与我的实际数据更相似,这里是一个可重现的矩阵和向量,类似于我现在的:

    m <- matrix(rpois(120*26, 1), nrow = 120, ncol = 26)
    v <- c(1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 5, 5, 6, 6, 6, 6, 7)
Run Code Online (Sandbox Code Playgroud)

Sim*_*nek 4

假设m是矩阵v是向量,你可以使用类似的东西

 t = table(v)
 size = dim(m)[1] * max(t)   # size of each block based on the longest
 matrix(unlist(lapply(names(t), function(i) {
               x = m[, v == i]                  # get the short block
               c(x, rep(NA, size - length(x)))  # extend it to size
         })), dim(m)[1])
Run Code Online (Sandbox Code Playgroud)