R数据表合并与Stata合并



我正在比较r data.table合并与Stata的合并命令。

说我们有两个数据集,x和y。都有一个通用的键id

Stata具有1:1 merge,这意味着数据集将在唯一ID上一对一merge D。如果我们在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,您左JOIN。然后,将给出任何未出现在X中的结果。所以我们需要做

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

对于"合并结果"数字代码2,您确实可以加入。然后,将给出任何未出现在y中的结果。所以我们需要做

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

对于"合并结果"数字代码3,您进行内部加入。它仅显示x和y。

中存在的数据
X[Y, nomatch=0, on=.(id)] or merge(X,Y, all=FALSE, on="id")

这是正确的吗?我对Stata Choice 3感到满意,这基本上是内在的联接。但是我与选择1和2感到困惑。如果您进一步进行na.omit((,它将恢复为选择3。这是正确的吗?

我在1:m或m:1对1的R中该怎么办,反之亦然?

fyi用于Stata手册:

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

用于数据。表合并:

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

我对Stata不太熟悉,但我认为我可以解释合并(从base,哪些数据。

假设您有这两个数据帧:

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。

左JOIN

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

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

右JOIN

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结合。所有ID,1-5。


另外,请看一下Dplyr的联接功能。他们有inner_joinleft_joinright_join等。

最新更新