【问题标题】:Compare lists within matrix to another matrix in R将矩阵中的列表与 R 中的另一个矩阵进行比较
【发布时间】:2020-05-15 14:21:14
【问题描述】:

我有两个带有维度的矩阵。矩阵中的一些单元格是 NA,其他的则填充了列表列表。如果矩阵 1 的单元格中有一个列表,那么矩阵 2 的相应单元格中总会有一个列表。

我需要的是另一个矩阵,它计算矩阵 1 的每个列表中的每个项目在矩阵 2 中的相应单元格中的次数。

这里是矩阵:

> matrix_1
     [,1]      [,2]     
[1,] NA            c(1001, 1002)
[2,] c(1001, 1003) NA       

> matrix_2
     [,1]                 [,2]     
[1,] NA                   c(1001, 1002, 1004)
[2,] c(1001, 1003, 1001)  NA     

这就是我要找的东西:

     [,1]    [,2]     
[1,] NA      2
[2,] 3       NA     

输出矩阵的单元格 [2,1] 为 3,因为在该单元格的矩阵 2 内的相应列表中,1003 出现了一次,而 1001 出现了两次。输出矩阵的单元格 [1,2] 为 2,因为 1001 和 1002 在该单元格的矩阵 2 的相应单元格内都出现过一次。

有什么想法吗?我不使用 R 中的大量矩阵,所以我有点迷茫。我可以将其设置为数据框,但认为矩阵可能更容易/更快。

这是输出:

Matrix 1 = structure(list(NA, c(1001, 1003), c(1001, 1002), NA), .Dim = c(2L, 
2L))
Matrix 2 = structure(list(NA, c(1001, 1003, 1001), c(1001, 1002, 1004), 
    NA), .Dim = c(2L, 2L))

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以试试下面的代码

    res <- Matrix1
    res[]<-Map(function(x,y) length(na.omit(match(x,y))),Matrix2,Matrix1)
    res[is.na(Matrix1)] <- NA
    

    这样

    > res
         [,1] [,2]
    [1,] NA   2   
    [2,] 3    NA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-06
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多