Если я правильно понял, duplicated()
функция для data.table
возвращает логический вектор, который не содержит первого появления дублированной записи. Каков наилучший способ отметить это первое появление? В случае base::duplicated()
я решил это просто путем дизъюнкции с обратной функцией порядка: myDups <- (duplicated(x) | duplicated(x, fromLast=TRUE))
- но в data.table::duplicated()
, fromLast=TRUE
не включен (я не знаю почему)...
P.S. ok, здесь примитивный пример
myDT <- fread(
"id,fB,fC
1, b1,c1
2, b2,c2
3, b1,c1
4, b3,c3
5, b1,c1
")
setkeyv(myDT, c('fB', 'fC'))
myDT[, fD:=duplicated(myDT)]
строки 1, 3 и 5 - все дубликаты, но только 3 и 5 будут включены в duplicated
, в то время как мне нужно отметить все из них.
UPD. важное уведомление: ответ, который я принял ниже, работает только для таблицы с ключом. Если вы хотите найти повторяющиеся записи, учитывающие все столбцы, вы должны явно указать setkey
все эти столбцы. До сих пор я использовал следующее обходное решение для этого случая:
dups1 <- duplicated(myDT);
dups2 <- duplicated(myDT, fromLast=T);
dups <- dups1 | dups2;