R数据表合并与Stata合并

时间:2018-03-28 18:05:11

标签: r merge data.table stata

我正在比较R data.table merge和Stata的合并命令。

假设我们有两个数据集,X和Y.两者都有一个共同的密钥id

Stata具有1:1 merge,这意味着数据集将在唯一ID上一对一地merge。如果我们在Stata中使用数据集X并希望与Y合并,那么" master"是X和"使用"是Y。

merge 1:1 id using Y, options

Stata进一步为您提供了他们所称的选择"匹配的结果"。基本上它是3个值的选择。

Numeric Code    Description
           1    observation appeared in X only
           2    observation appeared in Y only
           3    observation appeared in both only

我相信在R data.table中,1:1的合并是:

对于"合并结果"数字代码1,你做LEFT JOIN。然后,任何未出现在X中的结果都将被赋予NA。所以我们需要做

Y[X, on=.(id)] or merge(X,Y, all.x=TRUE, on="id")

对于"合并结果"数字代码2,你做RIGHT JOIN。然后,任何未出现在Y中的结果都将被赋予NA。所以我们需要做

X[Y, on=.(id)] or merge(X,Y, all.y=TRUE, on="id")

对于"合并结果"数字代码3,你做INNER JOIN。它仅显示X和Y中存在的数据。

X[Y, nomatch=0, on=.(id)] or merge(X,Y, all=FALSE, on="id")

这是对的吗?我很满意Stata选择3,它基本上是INNER JOIN。但我对选择1和2感到困惑。如果你进一步做na.omit(),它将恢复到选择3.这是正确的吗?

我能在R中做1:m或m:1一对多,反之亦然?

FYI for Stata手册:

https://www.stata.com/manuals/dmerge.pdf 

对于data.table merge:

https://rstudio-pubs-static.s3.amazonaws.com/52230_5ae0d25125b544caab32f75f0360e775.html

1 个答案:

答案 0 :(得分:1)

我对Stata不是很熟悉,但我想我可以解释合并(从base,data.table改编)

假设您有这两个数据框:

A <- data.frame(id = c(1,2,4,5),
                obs1 = c(100, 120, 500, 70))

B <- data.frame(id = c(1,3,4,5),
                obs2 = c("a", "c", "t", "r"))

您可以通过以下方式加入他们:

内部联接

merge(A, B)

你只有A和B的交叉点,例如ids 1,4和5。

左连接

merge(A, B, all.x = TRUE)

您将拥有相交信息,以及A中存在但不存在的任何内容。 1,2,4和5

正确加入

merge(A, B, all.y = TRUE)

在这里,您将获得交叉信息,以及B中的任何内容,但不包括A. ids 1,3,4和5

完全加入

merge(A, B, all.x = TRUE, all.y = TRUE)

在这里,您将拥有A和B中存在的ID的并集。所有ids,1-5。

或者,看看dplyr的连接函数。他们有inner_joinleft_joinright_join