我期待这是一项简单的任务,但令我惊讶的是,我无法找到解决方案.
我必须对矩阵执行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)
有没有办法取两个矩阵的交集,所以输出必须只返回第一行?
最有效的方法(恕我直言)是:
如果你想比较行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)
最后一个假设是m1
和m2
集合,即不同项目的集合.如果不是这样,你可以通过传递它们使它们成为集合unique
:m3 <- rbind(unique(m1), unique(m2))
.
两者都比使用快得多apply
.
归档时间: |
|
查看次数: |
4867 次 |
最近记录: |