首页 > 解决方案 > 如何从 R 中的 2 个合并矩阵创建一个向量并用 NA 填充任何维度间隙?

问题描述

假设我生成了一个 4x4 矩阵,如下图所示mat1。(图片来自 R Studio Console 的快照)。假设我生成了另一个任意大小的矩阵,例如(下图中的 1x2 mat2)。(在我的代码中,上述两个矩阵的矩阵元素和维度根据用户输入而有所不同;尽管列仅以 2 的倍数生成,所以我可以有一个 [ ]x2 矩阵、[ ]x4、[ ]x6、等等,并且行数可以是任何整数)。

在我的代码中,这两个矩阵合并为一个向量(通过 R 包处理需要一个向量shinyMatrix)。

由于这 2 个矩阵维度是可变的,因此在将 2 个矩阵合并到一个向量中时,您最终没有得到正确数量的元素来转换回“可测量”矩阵。如下图所示,mat3在组合 2 个矩阵后有 18 个元素mat1mat2并且必须删除某些元素并插入 NA,以在此示例中以 4x4、16 元素矩阵结束。

在某些情况下,mat2可以有比 更多的元素mat1。在这个例子中,我展示mat1了 16 个元素和mat22 个元素。

重要的是,在代码中,只有前 2 列mat1可以以这种方式替换为mat2值。3+ 的列mat1永远不会被mat2.

有没有一种有效的方法来编码?在哪里将 2 个矩阵一起放入较大矩阵的维度中,并用 NA 填充任何缺失的元素?

我正在沿着测量第mat11 列和第 2 列的长度、测量第 1mat2列和第 2 列的长度、合并、替换元素等的路径前进,但是以我有限的经验,它看起来非常麻烦并且工作不正确。我敢打赌 R 有一种巧妙的方法来完成这类事情。功能之一apply,例如mapply?我在某处读到mapply非常适合子集矩阵。Tibbles?

这是下图的矩阵输入:

mat1 <- matrix(c(1,2,NA,NA, 3,4,NA,NA, 5:12), ncol = 4)
mat2 <- matrix(c(10,30), ncol = 2)
mat3 <- c(mat2,mat1)

在此处输入图像描述

标签: rmatrixvectordimensions

解决方案


根据预期的输出,我们可以选择“mat1”中没有的列,并通过在“mat2”的末尾附加来将anyNA( c) 与length更正的列连接起来NA

c(sapply(mat2, `length<-`, nrow(mat1)), mat1[,!apply(mat1, 2, anyNA)])
[1] 10 NA NA NA 30 NA NA NA  5  6  7  8  9 10 11 12

推荐阅读