【问题标题】:R: Examine to see if a Datatable is subset of another DatatableR:检查数据表是否是另一个数据表的子集
【发布时间】:2018-01-07 10:50:33
【问题描述】:

无论rowcolumn 的顺序如何,我如何检查data table 是否是另一个data table子集
例如,假设某人 rbinded DT_xDT_y 删除了 duplicate 并创建了 DT_Z。现在,我想知道如何比较DT_xDT_Z 并获得显示/说明DT_zsubsetDT_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,就像你说的那样,如果没有任何重复,它就可以工作,内部连接期间会有重复的情况如何?
  • 首先对表进行重复数据删除并检查唯一版本。

标签: r datatable subset rbind


【解决方案1】:

我觉得你可以使用data.tablefintersect()fsetequal()

is_df1_subset_of_df2 <- function(df1, df2) {
  intersection <- data.table::fintersect(df1, df2)
  data.table::fsetequal(df1, intersection)
}

第一行选择存在于df2 中的df1 中的元素。 第二行检查该集合是否全部为df1

【讨论】:

    猜你喜欢
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多