R:矩阵的交集

R:矩阵的交集,r,set,R,Set,我原以为这是一项简单的任务,但出乎意料的是,我找不到解决办法 我必须对矩阵执行集合运算Intersect函数对向量的作用良好。但对于矩阵,他们认为每个列也是向量。我需要行-行比较的结果,而不是矩阵的每个元素 考虑以下两个矩阵 > m1 [,1] [,2] [1,] 1 6 [2,] 2 7 [3,] 3 8 [4,] 4 9 [5,] 5 10 及 有没有办法求两个矩阵的交集,这样输出只能返回第一行?使用以下方法: m1

我原以为这是一项简单的任务,但出乎意料的是,我找不到解决办法

我必须对矩阵执行集合运算Intersect函数对向量的作用良好。但对于矩阵,他们认为每个列也是向量。我需要行-行比较的结果,而不是矩阵的每个元素

考虑以下两个矩阵

> m1
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

有没有办法求两个矩阵的交集,这样输出只能返回第一行?

使用以下方法:

m1[apply(m1==m2, 1, all),]
配对比较;这是:

o <- outer(seq_len(nrow(m1)), seq_len(nrow(m2)), Vectorize(
    function(i, j) all(m1[i,]==m2[j,])
))
m1[apply(o, 1, any),]
m2[apply(o, 2, any),]

o看起来您只需要行对行比较。
在这种情况下,您可以使用

 m1[m1==m2, ]
如果要跨所有行进行比较,请使用

 m1[apply(m1, 1, function(r) any(ncol(m2)==rowSums(r==m2))), ]

最有效的方法(IMHO)是:

如果要将行
i
与行
i
进行比较(我不会称之为交叉点):

如果要将行
i
与任何行
j
(我称之为交叉点)进行比较:


m3考虑到您的预期输出,我认为交叉口不是正确的术语。也许匹配行?另外,请明确说明
m1
m2
具有相同的尺寸。谢谢!我采用了类似的方法来查找差异,即E1-E2必须只返回行,只返回E1中存在的行,而不返回E2中存在的行。但复制并没有多大帮助。有线索吗?
 m1[apply(m1, 1, function(r) any(ncol(m2)==rowSums(r==m2))), ]
m1[rowSums(m1 == m2) == ncol(m1), , drop = FALSE]
m3 <- rbind(m1, m2)
m3[duplicated(m3), , drop = FALSE]