在 R 中合并期间丢失的行

Rows lost during merge in R

我正在使用包含 18 万行和 27 个因子的 df1。我在与 df2 的合并中使用了 3 个因子(43K obs,10 个因子,3 个因子与 df1 匹配)。在 df1 中,这些行是 TrapLinesTrapNum 在数年内重复数月的观察结果。 TrapLines & TrapNum 有 3393 个独特的关卡。在 df2 中,ShadeTrapLineTrapnum 的月份而异:对于每个 TrapLine/Trapnum 条目,有 12 个值 Shade。在 df2 中,有 3268 个独特的级别与 Trapline/Trapnum 相关联。我想合并(如果这是正确的过程)df1df2,以便每月 Shade 数据与正确的 Trapline/TrapNumdf1.

df1:

TrapLine    TrapNum Date        Month_num
A24         D101    1-1-2018       1
A24         D101    2-13-2017      2
A24         D102    3-30-2017      3
A24         D102    4-10-2019      4
A24         D103    4-10-2019      4
A24         D103    5-15-2016      6

等等

df2:

TrapLine    TrapNum Shade      Month    Month_num
A24         D101    217         Jan      1
A24         D101    201         Feb      2
A24         D101    172         Mar      3
A24         D102    145         Mar      3
A24         D102    97          Apr      4
A24         D102    59          May      5

等等

我使用了以下代码:

df3 <- merge (df1, df2, by c("TrapLine", "TrapNum", "Month_num"))

但是,在这个过程中,我丢失了来自 df1 的 40K 个观测值!我无法解释发生了什么:我会认为,如果 TrapLine/TrapNum 之间没有匹配项,那么 Shade 值会被设置为 NA 之类的,并不是说观察结果会完全丢失。有人可以帮助我了解发生了什么以及可以使用什么过程以便我保留所有观察结果(我会担心在没有 Shade 的情况下消除观察结果!)。感谢您的时间和关注。 干杯,道格

使用 merge 函数的参数 all。默认情况下,all=FALSE,因此它执行“内部连接”,并删除所有不匹配的观察结果。如果你设置 merge(..., all=TRUE) 你有一个“外部连接”并保留所有观察。参见 https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/merge