Оператор %in%
является оберткой для функции соответствия, возвращающей «вектор той же длины, что и x». Например:Использование совпадения внутри i данных.table
> match(c("a", "b", "c"), c("a", "a"), nomatch = 0) > 0
## [1] TRUE FALSE FALSE
При использовании в i
из data.table, однако
(dt1 <- data.table(v1 = c("a", "b", "c"), v2 = "dt1"))
v1 v2
1: a dt1
2: b dt1
3: c dt1
(dt2 <- data.table(v1 = c("a", "a"), v2 = "dt2"))
v1 v2
1: a dt2
2: a dt2
dt1[v1 %in% dt2$v1]
v1 v2
1: a dt1
2: a dt1
дубликаты получены. Если ожидаемое поведение %in%
в пределах i
из data.table не дают тот же результат, как
dt1[dt1$v1 %in% dt2$v1]
v1 v2
1: a dt1
т.е. без дубликатов?
Я получаю без дубликатов с помощью 'data.table_1.9.5' – akrun
Да, я тоже. Это похоже на ошибку, которая уже была исправлена. BTW, 'data.table' имеет специальный метод для сопоставления символов, называемый'% chin% ', поэтому вы могли бы попробовать' dt1 [v1% chin% dt2 $ v1] ' –
Я использовал' data.table_1.9.4' с ' R версии 3.1.2 (2014-10-31) 'on' Платформа: x86_64-w64-mingw32/x64 (64-разрядная) ' – Jens