【发布时间】:2021-01-15 14:40:35
【问题描述】:
我有两个数据框,我试图通过 ID 和日期将它们组合成一个主数据框。我的问题是数据框有一些相似和一些独特的日期。一个数据框按顺序遍历日期,但可能在开始和/或结束时缺少一两天,而另一个数据框具有来自同一 ID 的多个样本,并且仅每 3 天采样一次。
DF1 示例:
Nest.ID Date X Y Nest.ID.Date
AMRO_1_ 5/2/20 7 2 AMRO_1_5-02-20
AMRO_1_ 5/3/20 1 5 AMRO_1_5-03-20
AMRO_1_ 5/4/20 7 9 AMRO_1_5-04-20
AMRO_1_ 5/5/20 3 2 AMRO_1_5-05-20
AMRO_1_ 5/6/20 1 3 AMRO_1_5-06-20
DF2 示例
Nest.ID Indiv.ID Date U V Nest.ID.Date
AMRO_1_ A 5/1/20 468 294 AMRO_1_5-01-20
AMRO_1_ B 5/1/20 454 456 AMRO_1_5-01-20
AMRO_1_ C 5/1/20 436 245 AMRO_1_5-01-20
AMRO_1_ A 5/4/20 356 762 AMRO_1_5-04-20
AMRO_1_ B 5/4/20 345 953 AMRO_1_5-04-20
AMRO_1_ C 5/4/20 356 345 AMRO_1_5-04-20
AMRO_1_ A 5/7/20 763 193 AMRO_1_5-07-20
AMRO_1_ B 5/7/20 763 186 AMRO_1_5-07-20
AMRO_1_ C 5/7/20 235 762 AMRO_1_5-07-20
想要的结果:
Nest.ID Date X Y Indiv.ID U V
AMRO_1_ 5/1/20 NA NA A 468 294
AMRO_1_ 5/1/20 NA NA B 454 456
AMRO_1_ 5/1/20 NA NA C 436 245
AMRO_1_ 5/2/20 7 2 NA NA NA
AMRO_1_ 5/3/20 1 5 NA NA NA
AMRO_1_ 5/4/20 7 9 A 356 762
AMRO_1_ 5/4/20 7 9 B 345 953
AMRO_1_ 5/4/20 7 9 C 356 345
AMRO_1_ 5/5/20 3 2 NA NA NA
AMRO_1_ 5/6/20 1 3 NA NA NA
AMRO_1_ 5/7/20 NA NA A 763 193
AMRO_1_ 5/7/20 NA NA B 763 186
AMRO_1_ 5/7/20 NA NA C 235 762
使用full_join 和keep= TRUE 我可以非常接近并获得最终的DF,其中包含来自DF1 的所有数据以及未对DF2 进行采样的NA,但我无法弄清楚如何还包括开头/不在 DF1 中但在 DF2 中的结束日期(示例中为 5/1 和 5/7)。我怀疑这可能是由于我的 ID.Date 的“关键”,但这些是我可以用来在合并时保持事情井井有条的唯一变量(换句话说,因为我每个 ID 有多个样本,我不能只是使用 ID 作为我的“密钥”)。
【问题讨论】:
-
查看您尝试调试的代码的实际 sn-p 会很有帮助。如果您使用的是
dplyr::full_join,则没有all参数,但它确实有keep参数 -
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表格的代码的 R/SQL。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你期望的内容和原因。
-
@camille 是的,我就是这个意思。我一直在 merge() 和 join() 之间切换,并在脑海中切换了两者。无论如何,
keep =也没有完成这项工作,我在最终合并的 DF 中仍然缺少 DF2 的那些开始和结束日期 -
联接不在键上,它们在条件上。查询不需要知道键和其他约束;输入和输出表的含义是查询的必要和充分的。 在给出业务关系(船舶)/关联或表(基础或查询结果)时,说明其中的一行根据其列值说明了业务情况。 Is there any rule of thumb to construct SQL query from a human-readable description? Re relational querying.您现在没有明确说明返回了哪些行。
-
您似乎只想要在 Nest.ID.Date 值的相等性和 Nest.ID 值的相等性上的完全连接的投影,即在 Date 值的相等性和 Nest.ID 值的相等性上。您说您尝试过并且在对已删除答案的评论中没有得到您想要的,但是您所说的并不是您所说的完全加入的结果,而您的示例输出是。 minimal reproducible example