当前位置: 首页 > 知识库问答 >
问题:

根据非NA列组合集合中的矩阵

吴正祥
2023-03-14

我们从一组矩阵开始。参考集合中的所有矩阵,我想创建一个新的矩阵,它表示集合中每个矩阵的列的组合。

集合中的每个矩阵具有不同的行数。当我们组合矩阵时,新行应该用NA填充。新矩阵获取集合中每个矩阵的前3个非NA列并将它们联接起来。

设置

set.seed(4)
mat1 <- matrix(nrow =9, ncol=9, runif(81))
mat2 <- matrix(nrow=10, ncol =9, runif(90))
mat3 <- matrix(nrow=11, ncol =9, runif(99))
mat4 <- matrix(nrow =9, ncol=9, runif(81)) 
mat2[,1:3] <- NA
mat3[,1:5] <- NA
mat4[,1:4] <- NA
mat_set <- list(mat1,mat2,mat3, mat4)

新矩阵:

绑定:

mat1[,1:3], mat2[,6:9], mat3[,6:9], mat4[,5:8]

我希望新矩阵的行数与集合中最大的矩阵的行数相同(在本例中,nrow=11)。当集合中的矩阵行不等于11时,用NA填充它们的条目。因此,对于Mat1,将目前不存在的第10行和第11行设为所有列的NA。此步骤必须在将矩阵绑定在一起之前进行。

输出形式:理想情况下,我希望代码自动检测集合中矩阵的NA列,然后连接前3个非NA列。此外,它是否可以处理大量矩阵/数据。那太好了。谢谢

输出的形式应为:

cbind.fill(mat1[,1:3], mat2[,7:9], mat3[,7:9], mat4[,7:9], fill= NA)

但不应该手动键入集合中的每个矩阵。

共有1个答案

何修能
2023-03-14

我们可以使用lappy循环遍历矩阵列表,选择前3列中的非NA值,然后使用do。调用以应用cbind。将填入列表。

do.call(rowr::cbind.fill, c(lapply(mat_set, function(x) 
        x[, head(which(apply(!is.na(x), 2, any)), 3)]), fill = NA))

或者使用colSums

do.call(rowr::cbind.fill, c(lapply(mat_set, function(x) 
     x[, head(which(colSums(is.na(x)) != nrow(x)), 3)]), fill = NA))
 类似资料:
  • 我正在寻找一种通用的方法来组合两个矩阵,以便两个初始矩阵中的列在新矩阵中交替出现 col1m1。。。col1m2。。。col2m1。。。二氧化碳。。。col3m1。。。col3m2。。。。。。 例如: 我正在寻找一种通用的方法,因为我将有多于3列的矩阵组合。我尝试了一些for循环和一些if语句,但对我来说,它们并没有真正结合在一起。将矩阵与洗牌和交替相结合的搜索也没有被证明是有效的。有什么想法吗?

  • 问题内容: 这里是问题:我有一个元组列表(也可以根据需要设置)。例如: 我想找到一个清单 因为一旦将所有集合放在一起,交集就不会为空。 举个例子 结果应该是 希望问题解决。那么,如果有的话,在python中最优雅的方法是什么? 干杯 问题答案: 这些是图形的 连接组件 ,可以使用诸如的图形库找到。对于第二个示例:

  • 问题内容: 以下Java代码按预期抛出: 但是以下示例仅在的内容上有所不同,执行时没有任何例外: 打印输出“ [lalala]”。为什么在第一个示例执行时第二个示例却不抛出? 问题答案: 简短答案 因为不能保证迭代器的快速失败行为。 长答案 之所以会出现此异常,是因为除非通过迭代器,否则无法在迭代集合时操作集合。 坏: 好: 现在转到“为什么”:在上面的代码中,请注意如何执行修改检查- 删除操作将

  • 我有一本字典。 我想找到两个元素的组合,其中每个元素必须来自不同的判决键。 例如:就是这样的组合,而不是这样的组合。 我已经试过这个了 但是它给了和两个不同的组合,但是我只想要其中一个。

  • 我知道根级firebase集合是最灵活和可伸缩的,子集合不能轻易删除。在计费方面,我知道firestore的存储数据总量、数据库操作和结果集返回的数据量。但比方说,对于一个包含消息的应用程序,我正在讨论不同的数据库体系结构方法 仅使用Root级别集合: 会话集合字段 成员(用户引用数组) 上次接收时间 会话ID(会话文档参考) 对对话和消息子集合使用根集合 会话集合字段 成员(用户引用数组) la

  • 我正在使用Java Swing库。我有两个宽度和高度相同的矩形,坐标相同。我想把它们组合成一个,这样我就能得到一个十字架。我怎样才能做到这一点?