【问题标题】:setdiff in r is not pulling subset of datar 中的 setdiff 没有提取数据子集
【发布时间】:2018-04-06 19:14:20
【问题描述】:

我有两个数据框:raw2 有 28,406 条记录,raw3 有 26,421 条记录。

raw3 中的记录是raw2 中的记录的子集。事实上raw3 是使用以下方法派生的:

raw3<-setDT(raw2)[order(O_ID, Program_forsorting), head(.SD, 1), .(O_ID)]

我现在有一个setdiff 函数,我正在尝试将未从raw2 转移到raw3 的记录使用:

settdiff(raw2,raw3)

结果应该有 1,985 条记录。但是,结果有 28,406 个,代表 raw2。如果我将公式切换为 settdiff(raw3,raw2),结果包含 26,421 条记录。

我做错了什么?

这里是示例数据

raw2<-as.data.frame(cbind("col1"=c("a","h","b","f","g"),"O_ID"=c(1,1,1,4,5), "Program_forsorting"=c("p1","p2","p2","p3","p1")))

【问题讨论】:

  • 是否有多个列?您是否尝试检查所有列中的所有值是否匹配?在寻求帮助时,您应该包含一个简单的reproducible example,其中包含示例输入和所需的输出,可用于测试和验证可能的解决方案。您不必分享您的实际数据,但除非我们能够重现正在发生的事情,否则很难提供帮助。
  • 我最初没有提供样本数据,因为我认为它与数据集的大小有关。我在上面提供了示例数据。

标签: r subset set-difference


【解决方案1】:

我不相信setdiff 直接在数据表上工作,因为它需要一个向量作为输入……您必须创建一个函数并应用于所有列。我会尝试使用本机数据表函数fsetdiff。确保两个对象都是数据表对象。

fsetdiff(raw2,raw3)

【讨论】:

    【解决方案2】:

    有人发布了回复,然后将其删除。但是,它有效,所以我会在这里分享。

    如果数据跨越多个列,我应该使用fsetdiff 函数。

    fsettdiff(raw2,raw3)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 1970-01-01
      • 2010-12-28
      • 2020-07-10
      • 1970-01-01
      • 2019-06-30
      • 2023-03-23
      相关资源
      最近更新 更多