r - 如何从 R 中的 2 个合并矩阵创建一个向量并用 NA 填充任何维度间隙?
问题描述
假设我生成了一个 4x4 矩阵,如下图所示mat1
。(图片来自 R Studio Console 的快照)。假设我生成了另一个任意大小的矩阵,例如(下图中的 1x2 mat2
)。(在我的代码中,上述两个矩阵的矩阵元素和维度根据用户输入而有所不同;尽管列仅以 2 的倍数生成,所以我可以有一个 [ ]x2 矩阵、[ ]x4、[ ]x6、等等,并且行数可以是任何整数)。
在我的代码中,这两个矩阵合并为一个向量(通过 R 包处理需要一个向量shinyMatrix
)。
由于这 2 个矩阵维度是可变的,因此在将 2 个矩阵合并到一个向量中时,您最终没有得到正确数量的元素来转换回“可测量”矩阵。如下图所示,mat3
在组合 2 个矩阵后有 18 个元素mat1
,mat2
并且必须删除某些元素并插入 NA,以在此示例中以 4x4、16 元素矩阵结束。
在某些情况下,mat2
可以有比 更多的元素mat1
。在这个例子中,我展示mat1
了 16 个元素和mat2
2 个元素。
重要的是,在代码中,只有前 2 列mat1
可以以这种方式替换为mat2
值。3+ 的列mat1
永远不会被mat2
.
有没有一种有效的方法来编码?在哪里将 2 个矩阵一起放入较大矩阵的维度中,并用 NA 填充任何缺失的元素?
我正在沿着测量第mat1
1 列和第 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)
解决方案
根据预期的输出,我们可以选择“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
推荐阅读
- python - Python - 仅在 Linux 终端中输入时出现 EOF 错误
- javascript - 更新表格的背景图像而不会“闪烁”
- typescript - 如何使用 patch-package 修补 TSX 文件
- node.js - Vuejs 中没有未使用的变量
- sql - 如何查询 cosmosdb 中的数字范围?
- django - 如何通过 django 在电子邮件中发送图像
- c# - T4 文本模板 - 导入和使用自己的代码
- airflow - 气流似乎正在丢失任务并认为它们失败了
- javascript - 如何在不刷新的情况下在javascript中显示数据以每2-5分钟运行一次
- azure-devops - PublishPipelineArtifact 已弃用 - 将本地目录或文件发布为当前管道的命名工件