在一个矩阵中找到R中另一个矩阵的模式

时间:2015-08-11 12:07:53

标签: r matrix

我有一个矩阵(V),看起来像这样

         [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[V1,]   37   15   30    3    4   11   35   31
[V2,]   44   31   45   30   24   39    1   18
[V3,]   39   49    7   36   14   43   26   24
[V4,]   45   31   26   33   12   47   37   15
[V5,]   23   27   34   29   30   34   17    4
[V6,]    9   46   39   34    8   43   42   37

我有另一个矩阵(X)

         [,1] [,2] [,3] [,4] [,5] [,6] 
[X1,]   37   15   21    3    4   11   35   31
[X2,]   37   37   45   30   24   39    1   18
[X3,]   39   49    7   36   14   43   26   24
[X4,]   45   31   26   37   12   47   37   15
[X5,]   23   27   34   29   30   37   17    4
[X6,]    9   46   39   34    8   37   42   37

现在矩阵V的每一行应该与矩阵X的每一行匹配,以得到像

这样的计数矩阵
  [,V1] [,V2] [,V3] [,V4] [,V5] [,V6] [,V7] [,8]
[X1,]   7      
[X2,]   

检查X1和V1之间的公共数字??

我如何使用R?请给我一些建议

2 个答案:

答案 0 :(得分:0)

这是使用apply

的一种快速'强力'方式
row.names(V) <- paste0("V",seq(6))
row.names(X) <- paste0("X",seq(6))

apply(V, 1, function(i){
  apply(X, 1, function(j){
    length(intersect(i, j))
    }
  )
})

   V1 V2 V3 V4 V5 V6
X1  7  1  0  3  1  1
X2  2  6  2  2  1  2
X3  0  2  8  1  0  2
X4  3  2  1  7  0  1
X5  3  1  0  1  7  2
X6  1  1  1  1  1  7

答案 1 :(得分:0)

使用==来比较两个矩阵的元素。这将为您提供逻辑矩阵(TRUE和FALSE)。然后,您可以使用apply()来累加每行中的TRUE数。

apply(V==X, 1, sum)