【发布时间】:2018-01-07 10:50:33
【问题描述】:
无论row 和column 的顺序如何,我如何检查data table 是否是另一个data table 的子集?
例如,假设某人 rbinded DT_x 和 DT_y 删除了 duplicate 并创建了 DT_Z。现在,我想知道如何比较DT_x 和DT_Z 并获得显示/说明DT_z 是subset 的DT_Z 的结果?
作为一个非常简单的例子:
DT1 <- data.table(a= LETTERS[1:10], v=1:10)
DT2 <- data.table(a= LETTERS[1:6], v=1:6)
DT1
a v
1: A 1
2: B 2
3: C 3
4: D 4
5: E 5
6: F 6
7: G 7
8: H 8
9: I 9
10: J 10
DT2
a v
1: A 1
2: B 2
3: C 3
4: D 4
5: E 5
6: F 6
我确信all.equal(DT1, DT2) 不会回答我的问题。
【问题讨论】:
-
他们有钥匙吗?如果您可以信任
a作为密钥,那么all(DT2$a %in% DT1$a)。如果您需要检查两列是否相等,则可以执行nrow(DT2) == nrow(merge(DT1, DT2, by = intersect(names(DT1), names(DT2))))。如果您在内连接上没有丢失行,那么它是较大数据集的一个子集(假设没有重复)。 -
@Gregor,就像你说的那样,如果没有任何重复,它就可以工作,内部连接期间会有重复的情况如何?
-
首先对表进行重复数据删除并检查唯一版本。