Czy istnieje szybki sposób na znalezienie, które wiersze w macierzy A występują w macierzy B? np.Porównywanie wierszy między dwiema macierzami
m1 = matrix(c(1:6), ncol=2, byrow = T); m2 = matrix(c(1:4), ncol=2, byrow=T);
a wynik wynosi 1, 2
Matryce nie mają taką samą liczbę rzędów (liczba kolumn jest takie samo), i są one dość duże - od 10^6 - 10^7 liczba rzędów.
Najszybszy sposób z tym, że wiem teraz, to:
duplicated(rbind(m1, m2))
Tnx!
Twoje rozwiązanie z 'duplicated' zwróci również wszystkie wiersze, które zostaną powtórzone w macierzy, nawet jeśli pojawią się tylko w jednej z dwóch macierzy. W każdym razie odpowiedź @ MatthewDowle jest świetna. –
'data.table' może być szybsze, ponieważ nie używa' do.call ("wklej" 'pod maską.Jeśli wolisz' duplicated' na 'M2 [M1]' then 'duplicated (as.data.table (rbind (m1, m2))) 'może być szybszy, z tego samego powodu.Chciałbym zobaczyć twoje timing –
@David O tak, dobry punkt o' duplikacji' podejściu –