Вы не указали, что вы считаете правильным ответом, и ваша терминология кажется немного расплывчатой, когда вы говорите «где есть взаимное совпадение», но если я правильно понимаю задачу как поиск всех строк, где col.3 == col.10 & col.4 == col.11, тогда это должно выполнить задачу:
which( outer(indat$V4, indat$V11, "==") &
outer(indat$V3, indat$V10, "=="),
arr.ind=TRUE)
# result
row col
[1,] 19 1
[2,] 10 3
[3,] 7 6
[4,] 8 6
[5,] 6 7
[6,] 11 8
[7,] 3 10
[8,] 7 11
[9,] 8 11
[10,] 1 19
Внешняя функция применяет функцию 'FUN', в данном случае "==", ко всемдвусторонние комбинации x и y, его первый и второй аргументы, поэтому здесь мы получаем матрицу nxn с логическими элементами, и я беру логические «и» двух таких матриц.Итак, строки, в которых есть совпадения с другими строками:
unique( c(which( outer(indat$V4, indat$V11, "==") &
outer(indat$V3, indat$V10, "=="),
arr.ind=TRUE) ))
#[1] 19 10 7 8 6 11 3 1
Итак, набор с no совпадает, предполагая, что data.frame с именем indat:
matches <- unique( c(which( outer(indat$V4, indat$V11, "==") &
outer(indat$V3, indat$V10, "=="), arr.ind=TRUE) ))
indat[ ! 1:NROW(indat) %in% matches, ]
А со спичками:
indat[ 1:NROW(indat) %in% matches, ]