Если я правильно понял, 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;