То, что вы делаете, это создание 2 логических значений для каждой строки, так что у вас есть эта ошибка и вы не выполняете то, что вы что. Так что, действительно, %in%
не способ сделать это.
Вы должны сделать это в двойном условии с and
:
Я делаю воспроизводимый пример:
DT1 = as.data.table(data.frame(col1 = c(1,2,3,2,5,1,3,3,1,2),
col2 = c(3,4,5,4,3,4,5,3,4,5),
col3 = c(1,2,3,4,5,6,7,8,9,10)))
DT2 = as.data.table(data.frame(col1 = c(1,2,1,2,3,4,3,2,4,3),
col2 = c(3,4,5,3,6,4,5,4,3,4),
col3=c(11,12,13,14,15,16,17,18,19,20)))
РЕДАКТИРОВАТЬ: основываясь на замечании, я исправляю свой ответ (Это было больше уловки, чем я думал).
Я создаю функцию фильтра, которая поможет мне проверить, есть ли совпадения в DT2
filter <- function(x){
any(x[1] == DT2[["col1"]] & x[2] == DT2[["col2"]])
}
Я применяю эту функцию к каждому ряду DT1
indexes = apply(DT1, 1, filter)
I фильтр
> DT1[indexes, ]
col1 col2 col3
1: 1 3 1
2: 2 4 2
3: 3 5 3
4: 2 4 4
5: 3 5 7