【发布时间】:2020-10-26 15:18:55
【问题描述】:
我正在处理牛的生育数据。在一个表(数据框)中,我所拥有的是记录在一头奶牛身上进行的所有服务(如授精)。在另一张表中,我得到了妊娠诊断(阳性或阴性)。两者都有一个唯一的 ID (animal_id)。我的挑战是成功地将两个表合并到正确的数据范围内,这意味着我需要的是与正确的授精记录相关的妊娠检查。这是两个表的外观示例,
animal_id service_date
610710 2005-10-22
610710 2006-12-03
610710 2006-12-27
610710 2007-12-02
610710 2008-01-17
610710 2008-03-04
另一张表相同,但日期(event_date)和诊断不同,
animal_id event_date event_description
610710 2006-06-16 PP
610710 2007-02-15 PP
610710 2008-01-09 PN
610710 2008-04-09 PP
610710 2009-06-16 PP
所以我想做的是以日期互补的方式合并两个表,这意味着如果在 2005 年 10 月 12 日执行服务,当我加入两个表时,该行将链接到最近的日期事件表,最接近的意思是稍后 - 因为授精发生在诊断之前。所以想要的输出应该是这样的,
animal_id service_date event_date event_description
1 610710 2005-10-22 NA NA
2 610710 NA 2006-06-16 PP
3 610710 2006-12-03 2007-02-15 PP
4 610710 2006-12-27 2007-02-15 PP
5 610710 2007-12-02 2008-01-09 PN
6 610710 2008-01-17 2008-04-09 PP
7 610710 2008-03-04 NA NA
8 610710 NA 2009-06-16 PP
在最终输出中,我希望大量记录不会与任何内容合并,例如示例输出中的第 1 行。 2005 年 10 月进行了一次服务,但我对那头牛的第一次诊断是在 2006 年 6 月 - 可能缺少一些服务记录。不幸的是,这是可以预料的。对于此示例,只有第 5 行和第 6 行有意义。对于第 3 行和第 4 行,我只考虑第 4 行,因为这可能是导致怀孕的授精。
这在 R 中是否可行?
谢谢!
【问题讨论】:
-
您也可以共享来自事件数据框的数据吗?还有什么是合并应该发生的日期范围?
-
嗨@KarthikS,感谢您的评论。我也添加了来自事件的数据。日期范围的棘手之处在于它是“灵活的”(至少可以这么说)...... service_date 之后 60 天之内的任何事情都是相当大的
-
为清楚起见,如果您为此示例数据提供了预期的输出,将会有所帮助。谢谢! (预先,我怀疑这最好使用以下之一来完成:
data.table、SQL/sqldf或fuzzyjoin。) -
嗨@r2evans,感谢您的评论。我添加了一个示例输出和一些额外的信息,希望这会有所帮助。谢谢!
-
为什么 2006-06-16 event_date 与 2005-10-22 service_date 不匹配?
标签: r date-range