R:矩阵的交集

mqp*_*sta 4 r set

我期待这是一项简单的任务,但令我惊讶的是,我无法找到解决方案.

我必须对矩阵执行set操作.相交函数适用于矢量.但是对于矩阵,他们也将每列视为矢量.我需要行 - 行比较而不是矩阵的每个元素.

考虑以下两个矩阵

> m1
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10
Run Code Online (Sandbox Code Playgroud)

> m2
     [,1] [,2]
[1,]    1    6
[2,]    3    8
[3,]    4    9
[4,]    5   10
[5,]    6   11
Run Code Online (Sandbox Code Playgroud)

有没有办法取两个矩阵的交集,所以输出必须只返回第一行?

flo*_*del 6

最有效的方法(恕我直言)是:

如果你想比较行i与行i(我不会称之为交集):

m1[rowSums(m1 == m2) == ncol(m1), , drop = FALSE]
Run Code Online (Sandbox Code Playgroud)

如果你想比较行i到任何行j(我称之为交集):

m3 <- rbind(m1, m2)
m3[duplicated(m3), , drop = FALSE]
Run Code Online (Sandbox Code Playgroud)

最后一个假设是m1m2集合,即不同项目的集合.如果不是这样,你可以通过传递它们使它们成为集合unique:m3 <- rbind(unique(m1), unique(m2)).

两者都比使用快得多apply.