Мне нужно идентифицировать и дедуплицировать группы записей в таблице данных r (но я полагаю, что проблема будет одинаковой на любом языке программирования), структурированной следующим образом:
Группы идентифицируются по значениям в var1 и var2, и они являются дубликатами, если они имеют одинаковый размер и содержат одинаковые значения в var2 и var3 (значения в var3 - это те, которые определены большими группами по var1 и var2 имеют общее).
Таким образом, в примере 2 красные группы являются дубликатами, но пара (красный, синий) и пара (красный, коричневый) не являются.
Мое решение состоит в том, чтобы переместить таблицу в широкий формат
, а затем выполнить unique(dt[,var1:=NULL])
и перенести обратно в длинный формат (мне не понадобится var1 больше на этом этапе).
Проблема в том, что моя реальная таблица содержит 165 391 868 записей, и это не одноразовая задача, а еженедельная с таблицами аналогичного размера и ограниченным временем выполнения.
я пробовал spl разбивает таблицу на куски, добавляет их, а затем выполняет дедупликацию, но первая транспонирование теперь выполняется более 2 часов!
Есть ли альтернативное и быстрое решение? Большое спасибо!
Код для создания примера таблицы:
dt <- data.table(
var1=c(
"value1_1",
"value1_1",
"value1_1",
"value1_2",
"value1_2",
"value1_2",
"value1_2",
"value1_3",
"value1_3",
"value1_3",
"value1_4",
"value1_4",
"value1_4",
"value1_5",
"value1_5",
"value1_5",
"value1_5"),
var2=c(
"value2_1",
"value2_1",
"value2_1",
"value2_1",
"value2_1",
"value2_1",
"value2_1",
"value2_1",
"value2_1",
"value2_1",
"value2_1",
"value2_1",
"value2_1",
"value2_1",
"value2_1",
"value2_1",
"value2_1"),
var1=c(
"value3_1",
"value3_2",
"value3_3",
"value3_2",
"value3_4",
"value3_5",
"value3_6",
"value3_1",
"value3_2",
"value3_3",
"value3_1",
"value3_2",
"value3_4",
"value3_1",
"value3_2",
"value3_3",
"value3_5"))