Предположим, что у меня есть матрица m x n M1 и k x l матрица M2 с l < = n. Я хочу найти все эти строки в M1, которые содержат в себе некоторую строку M2.Найдите строки матрицы, содержащие строки другой матрицы.
Для примера рассмотрим следующую ситуацию:
> M1 <- matrix(c(1,2,3,4,5,6,7,8,9), nrow = 3, ncol = 3, byrow = TRUE)
> M2 <- matrix(c(1,3,8,9), nrow = 2, ncol = 2, byrow = TRUE)
> M1
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
> M2
[,1] [,2]
[1,] 1 3
[2,] 8 9
Затем ряды один и три М1 выполнить условие, в строке один содержит 1 и 3 и последней строки 8 и 9.
Так как для достижения этого эффективным способом? Я написал код с использованием циклов, но поскольку я работаю с очень большими матрицами, это решение занимает много времени.
Вы можете подумать о представлении 'M1' и' M2' как 'table (row (M1), factor (M1, 1: 9))' и 'table (row (M2), factor (M2, 1: 9)) ', соответственно. Таким образом, вы можете найти любую связь между строками более простым способом. Падение на редкие альтернативы, так как иначе будут проблемы с памятью, 'library (Matrix); tab1 = sparseMatrix (i = строка (M1), j = M1, x = 1L); tab2 = sparseMatrix (i = строка (M2), j = M2, x = 1L); tcrossprod (tab1, tab2) '. Последний объект подсчитывает совпадения между каждой строкой 'M1' и' M2' и может быть сравнен с 'nrow (M2)' для извлечения вашего результата. –
@StefanH Если какой-либо из нижеприведенных ответов решает вашу проблему, пожалуйста, подумайте о ее маркировке. –