【问题标题】:Put in NULL positions of a matrix the content of another matrix (list content)将另一个矩阵的内容(列表内容)放入矩阵的 NULL 位置
【发布时间】:2019-05-26 13:12:10
【问题描述】:

拥有m1(矩阵1):

[,1]
200
NULL
NULL
300
NULL
NULL
400
NULL
NULL

m2:

 [,1]
    1
    2
    3
    4
    5
    6

我们想要得到如下结果:

 [,1]
    200
    1
    2
    300
    3
    4
    400
    5
    6

因此,m2 的任何元素都必须适合 m1 的 NULL 位置。合并、加入、追加...显然不起作用,除非有针对这种情况的论据。

m1<-matrix(c(200,NA,NA,300,NA,NA,400,NA,NA), nrow = 9, ncol = 1) #I usually get NULL values in my code results

m2<-matrix(c(1,2,3,4,5,6), nrow = 6, ncol = 1)

欢迎和奖励任何想法!

【问题讨论】:

  • m1[is.na(m1)] &lt;- m2
  • 它正在工作,但如果我的矩阵上有 NULL 位置怎么办? is.null ?
  • 矩阵中不能有 NULL 元素。 NA 与 NULL 不同。
  • 我只能重申:矩阵中不能有 NULL 元素。您应该为您的矩阵提供 dput 的输出。也许你有一个字符矩阵,其中一些元素是字符串“NULL”。
  • 你在矩阵中有一个列表元素吗?在这种情况下,做m1[] &lt;- Map(function(x, y) {x[is.null(x)] &lt;- y; x}, m1, m2)

标签: r matrix merge


【解决方案1】:

似乎matrix 元素是list 元素。因此,我们需要使用Map 循环遍历各个元素(以替换第二个矩阵中的相应值)

m1[] <- Map(function(x, y) {x[is.null(x)] <- y; x}, m1, m2)

更新

根据 OP 的帖子中显示的带有 NAs 的示例,“m2”长度可能等于“m1”中 NULL 元素的数量。在这种情况下,我们可以根据通过循环 'm1' 的元素创建的逻辑索引进行分配

m1[sapply(m1, is.null)] <- m2

【讨论】:

  • @akrun m1[] 这个支架是干什么用的?
  • @YOLO 括号是为了保留结构
  • @akrun,对此我深表歉意,但这不起作用。我收到了错误Warning message: In mapply(FUN = f, ..., SIMPLIFY = FALSE) : longer argument not a multiple of length of shorter ,我在不同的进程中多次检查了所有数据。所以最后我使用了 IceCreamToucan 解决方案,它工作正常。我从数据的第二个序列中得到了一个完全随机的矩阵。但是,您的解决方案会发生什么?可以改进吗?
  • @fina 它基于以下假设:您将列表元素作为矩阵的元素,并且 m2 也是具有相同维度的矩阵。请检查str(m1)str(m2)
  • @fina 根据您在帖子中显示的示例。可能是“m2”长度等于 m1 中 NULL 元素的数量。在这种情况下,更新的解决方案应该可以工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多