我正在比较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
答案 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_join
,left_join
,right_join
等