Сравнение строк между двумя матрицами - PullRequest
13 голосов
/ 16 февраля 2012

Есть ли быстрый способ найти, какие строки в матрице A присутствуют в матрице B? например

m1 = matrix(c(1:6), ncol=2, byrow = T); m2 = matrix(c(1:4), ncol=2, byrow=T);

и результат будет 1, 2.

Матрицы не имеют одинаковое количество строк (количество столбцов одинаково), и они несколько большие - от 10 ^ 6 - 10 ^ 7 количество строк.

Самый быстрый способ сделать это, насколько я знаю, это:

duplicated(rbind(m1, m2))

Tnx!

Ответы [ 2 ]

23 голосов
/ 16 февраля 2012

Быстрый способ для этого размера должен быть:

require(data.table)
M1 = setkey(data.table(m1))
M2 = setkey(data.table(m2))
na.omit(
    M2[M1,which=TRUE]
)
[1] 1 2
0 голосов
/ 16 марта 2016

Я создал эту функцию, которая будет возвращать исходный идентификатор.Например, вы хотите сопоставить матрицу x с матрицей y, она вернет идентификатор совпадения y.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...