如何从 R 中的 2 个合并矩阵创建一个向量并用 NA 填充任何维度间隙?
How to create a vector from 2 merged matrices in R and fill in any dimension gaps with NA's?
假设我生成了一个 4x4 矩阵,如下图所示 mat1
。 (图像来自 R Studio 控制台的快照)。例如,假设我生成了另一个任意大小的矩阵(下图中的 1x2 mat2
)。 (在我的代码中,上述两个矩阵的矩阵元素和维度根据用户输入而变化;尽管列仅以 2 的倍数生成,所以我可以有一个 [ ]x2 矩阵,[ ]x4,[ ]x6,等等,行数可以是任意整数)。
在我的代码中,这两个矩阵被合并成一个向量(通过 R 包 shinyMatrix
处理需要一个向量)。
由于这 2 个矩阵维度是可变的,因此在将这 2 个矩阵合并为一个向量时,有时您不会得到正确数量的元素以转换回“可标注”矩阵。如下图所示 mat3
,其中在组合 2 个矩阵 mat1
和 mat2
后有 18 个元素,必须删除某些元素并插入 NA 以 4x4 结束,此示例中的 16 元素矩阵。
在某些情况下 mat2
可以比 mat1
拥有更多的元素。在这个例子中,我显示 mat1
有 16 个元素,mat2
有 2 个元素。
重要的是,在代码中,只有 mat1
的前两列可以用 mat2
值以这种方式替换。 mat1
的第 3+ 列从未被 mat2
更改。
有没有有效的编码方法?将 2 个矩阵一起放入较大矩阵的维度中,并用 NA 填充任何缺失的元素?
我正在测量 mat1
第 1 列和第 2 列的长度,测量 mat2
第 1 列和第 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)
根据预期的输出,我们可以 select 'mat1' 中没有 anyNA
的列,并将 (c
) 与 length
通过在 'mat2'
的末尾附加 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
假设我生成了一个 4x4 矩阵,如下图所示 mat1
。 (图像来自 R Studio 控制台的快照)。例如,假设我生成了另一个任意大小的矩阵(下图中的 1x2 mat2
)。 (在我的代码中,上述两个矩阵的矩阵元素和维度根据用户输入而变化;尽管列仅以 2 的倍数生成,所以我可以有一个 [ ]x2 矩阵,[ ]x4,[ ]x6,等等,行数可以是任意整数)。
在我的代码中,这两个矩阵被合并成一个向量(通过 R 包 shinyMatrix
处理需要一个向量)。
由于这 2 个矩阵维度是可变的,因此在将这 2 个矩阵合并为一个向量时,有时您不会得到正确数量的元素以转换回“可标注”矩阵。如下图所示 mat3
,其中在组合 2 个矩阵 mat1
和 mat2
后有 18 个元素,必须删除某些元素并插入 NA 以 4x4 结束,此示例中的 16 元素矩阵。
在某些情况下 mat2
可以比 mat1
拥有更多的元素。在这个例子中,我显示 mat1
有 16 个元素,mat2
有 2 个元素。
重要的是,在代码中,只有 mat1
的前两列可以用 mat2
值以这种方式替换。 mat1
的第 3+ 列从未被 mat2
更改。
有没有有效的编码方法?将 2 个矩阵一起放入较大矩阵的维度中,并用 NA 填充任何缺失的元素?
我正在测量 mat1
第 1 列和第 2 列的长度,测量 mat2
第 1 列和第 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)
根据预期的输出,我们可以 select 'mat1' 中没有 anyNA
的列,并将 (c
) 与 length
通过在 'mat2'
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