【问题标题】:R equivalent to SAS's "In" data set option for including and excluding overlapping dataR 相当于 SAS 的“In”数据集选项,用于包含和排除重叠数据
【发布时间】:2018-04-15 16:07:53
【问题描述】:

我通常是 SAS 用户,但想知道 R 中是否有类似的方法来列出合并后只能在一个数据框中找到的数据。在 SAS 中我会使用

data want;
    merge have1 (In=in1) have2 (IN=in2) ;
    if not in2;
run;

仅在 have1 中查找条目。 我的 R 代码是:

inner <- merge(have1, have2, by= "Date", all.x = TRUE, sort = TRUE)

我试过 setdiff() 和 antijoin() 但似乎都没有给我想要的东西。此外,我想找到一种相反的方法。我想在 have1 和 have2 中找到具有相同“日期”条目的条目,然后将其余变量保留在 2 个数据框中。例如,考虑具有列“Date”、“ShotHeight”、“ShotDistance”的 have1 和具有列“Date”、“ThrowHeight”、“ThrowDistance”的 have2,因此 m]new 数据帧,称之为“new”具有列“Date” ", ShotHeight", "ShotDistance", "ThrowHeight", "ThrowDistance"。

【问题讨论】:

  • 我相信这里更标准的术语是反加入,IIUC。希望这可以帮助继续搜索... data.table 和 dplyr 都内置了此功能的干净/自然实现
  • @Renu 这不是骗子,因为 OP 想要的东西没有列在那个问题的选项中。
  • in 是一个运算符和一个数据步选项,但从技术上讲,它不是一个函数。
  • 您的 SAS 代码没有 BY 语句。如所写,您正在对 have1 和 have2 进行逐行合并。这与您编写的 R 代码不同,后者根据每个数据帧中的 County 列的值合并两个数据帧。这是你想要的吗?

标签: r merge sas subset


【解决方案1】:

假设只有一个副变量,最简单的解决方案根本不是merge

want <- subset(have1, !(county %in% have2$county))

此子集 have1 以排除 county 的值在 have2 中的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    相关资源
    最近更新 更多