【问题标题】:Match two lists of matrices (row-wisely) in R匹配 R 中的两个矩阵列表(逐行)
【发布时间】:2016-06-09 20:59:16
【问题描述】:

a 和b 是两个对象编号相同的列表。 a 和 b 中包含的对象都是矩阵”。

a<-list(matrix(c(1,2,2),1,3),matrix(c(2,1,1,1,2,2),2,3),matrix(,0,3))
b<-list(matrix(c(2,2,2),1,3),matrix(c(1,1,2),1,3),matrix(c(1,2,1),1,3))
> a
[[1]]
     [,1] [,2] [,3]
[1,]    1    2    2

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

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

> b
[[1]]
     [,1] [,2] [,3]
[1,]    2    2    2

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

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

从上面我们可以看到a和b中有3个对象(即矩阵)。列表a 中每个矩阵的行号不同,而列表b 中每个矩阵的行号相同(nrow=1)。我想将a 的每一行与b 中的相应行进行比较,并计算(在各列中)有多少位置是相同的。

我们以a 和b 中的第二个对象为例。在a 中,对象2 是一个矩阵(ncol=3, nrow=2),我们需要将每一行与b 中的第二个矩阵进行比较。 a的第二个对象的第一行是2 1 2,我们可以看到第二个和第三个数字与b中的第二个对象相同(1 1 2),所以输出为2,然后我们继续用第二行(1 1 2)进行比较,发现这三个数字与b列表中的对象2相同,所以输出为3。

预期结果如下:

[[1]]
[1] 2

[[2]]
[1] 2 3

[[3]]
[1] 0

我用下面的代码来计算:

Map(function(a,b) matrix(sapply(1:3, function(x) {a[,x]==b[,x]}),ncol=3),a,b)

[[1]]
      [,1] [,2] [,3]
[1,] FALSE TRUE TRUE

[[2]]
      [,1] [,2] [,3]
[1,] FALSE TRUE TRUE
[2,]  TRUE TRUE TRUE

[[3]]
     [,1]      [,2]      [,3]     
[1,] Logical,0 Logical,0 Logical,0

但我不知道如何继续对结果求和,因为第三个对象中有Logical,0。你能帮我解决这个问题吗?谢谢你。或者是否有其他方法可以解决这个问题。谢谢!

【问题讨论】:

    标签: r list matrix


    【解决方案1】:

    这是一个选项:

    Map(function(x,y) apply(x, 1, function(z) rowSums(z == y)), a, b)
    #[[1]]
    #[1] 2
    #
    #[[2]]
    #[1] 2 3
    #
    #[[3]]
    #numeric(0)
    

    【讨论】:

    • 不错的解决方案,但它仅适用于 OP 的示例,不适用于 a=list(structure(c(1, 2, 2), .Dim = c(1L, 3L)), structure(c(2, 1, 1, 1, 2, 2), .Dim = 2:3), structure(c(1, 2, 2, 3, 2, 5, 3, 2, 1), .Dim = c(3L, 3L))); b=list(structure(c(2, 2, 2), .Dim = c(1L, 3L)), structure(c(1, 1, 2), .Dim = c(1L, 3L)), structure(c(1, 2, 1, 3, 1, 3), .Dim = 2:3))
    • @m0h3n, OP指定“列表b的每个矩阵中的行号相同(nrow=1)”
    猜你喜欢
    • 2016-07-27
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多