这是我对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选项,但我不能完全调整这些选项以获得我想要的东西。我很感激你的想法!
答案 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;中做一个类似的提取。无论如何,这对我来说似乎更简单。