在R中合并:寻找类似于SAS合并输出选项的选项

时间:2014-04-16 21:46:35

标签: r merge sas

这是我对StackOverflow的第一个问题。如果我的问题没有得到完善或明确,我会提前道歉。

在SAS中合并时,可以输出不匹配的行到备用数据集。

例如,

data matched nomatch_a nomatch_b;  
    merge A(in=a) B(in=b);  
    by var;  
    if a and b then output matched;  
    else if a and not b then output nomatch_a;  
    else if b and not a then output nomatch_b;  

在这种情况下:
- 成功合并的行输出到匹配的
- 数据集A中没有B匹配的行输出到nomatch_a
- 数据集B中没有A匹配的行输出到nomatch_b。

我希望在R中做类似的事情。它不一定是一个单行,但我想要一个优雅的解决方案。我知道有all.x,all.y选项,但我不能完全调整这些选项以获得我想要的东西。我很感激你的想法!

1 个答案:

答案 0 :(得分:1)

 #if a and b then output matched;  

matched <- merge(a,b, by= "var")

全部&#39;默认情况下,参数为FALSE,它为您提供&#34;内部连接&#34;。

#    else if a and not b then output nomatch_a;  

nomatch_a <- a[ !a$var %in% unique(b$var) , ]

#    else if b and not a then output nomatch_b;  

nomatch_b <- b[ !b$var %in% unique(a$var) ,  ]

后两个赋值构造逻辑向量并使用&#34; [&#34;函数只为TRUE行提取整行。我不认为有任何一个单行,但是你很难说SAS可以说是一个单行的吗?我想你可以先使用all=TRUE,然后从&#34;全外连接&#34;中做一个类似的提取。无论如何,这对我来说似乎更简单。