在 R 中合并期间丢失的行
Rows lost during merge in R
我正在使用包含 18 万行和 27 个因子的 df1
。我在与 df2
的合并中使用了 3 个因子(43K obs,10 个因子,3 个因子与 df1
匹配)。在 df1
中,这些行是 TrapLines
和 TrapNum
在数年内重复数月的观察结果。 TrapLines
& TrapNum
有 3393 个独特的关卡。在 df2
中,Shade
因 TrapLine
和 Trapnum
的月份而异:对于每个 TrapLine
/Trapnum
条目,有 12 个值 Shade
。在 df2
中,有 3268 个独特的级别与 Trapline
/Trapnum
相关联。我想合并(如果这是正确的过程)df1
和 df2
,以便每月 Shade
数据与正确的 Trapline
/TrapNum
在 df1
.
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
我正在使用包含 18 万行和 27 个因子的 df1
。我在与 df2
的合并中使用了 3 个因子(43K obs,10 个因子,3 个因子与 df1
匹配)。在 df1
中,这些行是 TrapLines
和 TrapNum
在数年内重复数月的观察结果。 TrapLines
& TrapNum
有 3393 个独特的关卡。在 df2
中,Shade
因 TrapLine
和 Trapnum
的月份而异:对于每个 TrapLine
/Trapnum
条目,有 12 个值 Shade
。在 df2
中,有 3268 个独特的级别与 Trapline
/Trapnum
相关联。我想合并(如果这是正确的过程)df1
和 df2
,以便每月 Shade
数据与正确的 Trapline
/TrapNum
在 df1
.
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