Có cách nào nhanh chóng để tìm ra các hàng nào trong ma trận A có mặt trong ma trận B không? ví dụ:So sánh các hàng giữa hai ma trận
m1 = matrix(c(1:6), ncol=2, byrow = T); m2 = matrix(c(1:4), ncol=2, byrow=T);
và kết quả sẽ là 1, 2.
Các ma trận không có cùng số hàng (số cột là như nhau), và họ là hơi lớn - từ 10^6 - 10^7 số hàng.
Cách nhanh nhất để làm việc đó, mà tôi biết bây giờ, là:
duplicated(rbind(m1, m2))
Tnx!
Giải pháp của bạn với 'trùng lặp' cũng sẽ trả lại bất kỳ hàng nào được lặp lại trong ma trận, ngay cả khi chỉ xuất hiện trong một trong hai ma trận. Dù sao, câu trả lời của @ MatthewDowle thật tuyệt vời. –
'data.table' có thể nhanh hơn vì nó không sử dụng' do.call ("paste" 'dưới mui xe. Nếu bạn thích' duplicateated' thành 'M2 [M1]' thì 'duplicate (as.data.table (rbind (m1, m2))) 'có thể nhanh hơn, vì lý do tương tự. Quan tâm để xem timings của bạn –
@David Ồ vâng, điểm tốt về cách tiếp cận' trùng lặp' –