【发布时间】:2020-04-28 11:01:26
【问题描述】:
我需要在 r 数据表中识别和去重记录组(但我认为问题在任何编程语言中都是相同的),结构如下:
组由 var1 和 var2 中的值标识,如果它们具有相同的大小并且在 var2 和 var3 中包含相同的值,则它们是重复的(var3 中的值是由 var1 和 var2 标识的较大组的共同点) .
所以在示例中,两个红色组是重复的,但对 (red,blue) 和对 (red,brown) 不是。
我的解决方案是将表格转换为宽格式
然后执行unique(dt[,var1:=NULL]) 并转回长格式(此时我不再需要 var1)。
问题是我的真实表有 165,391,868 条记录,这不是一次性任务,而是每周一次的任务,具有相似大小的表并且时间有限。
我尝试将表拆分成块,附加它们,然后进行重复数据删除,但第一个转置现在已经运行了 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"))
【问题讨论】:
-
您的预期输出是什么?只保留绿色、蓝色和棕色的行?
-
我希望有绿色、蓝色和棕色的线条,而红色的线条只有一次
-
但是 2 个红色组有不同的
var1值。它们是如何重复的? -
如果你读到他说的重复是基于 var3 列和大小的问题
-
对不起,要重复它们也需要在 var2 中具有相同的值
标签: r duplicates data.table