首页 > 解决方案 > 将两个数据框连接在一起,并使用最近的结果作为添加的行

问题描述

我正在尝试实现如下所示的“Final.Data”输出。

我们从参考数据开始,我想添加“Add.Data”,但加入“Person”并返回参考(日期)之前的最新结果。

我在 r 中寻找 dplyr、data.table 或 sql 解决方案。

然后,我希望能够为 1000 个条目重现此内容,因此寻找一个合理有效的解决方案。

library(tibble)
Reference.Data  <-  tibble(Person = "John",
                           Date = "2019-07-10")

Add.Data <- tibble(Person = "John",
                   Order.Date = c("2019-07-09","2019-07-08") ,
                   Order = 1:2)

Final.Data <- tibble(Person = "John",
                     Date = "2019-07-10",
                     Order.Date = "2019-07-09",
                     Order = 1)

标签: rdplyrdata.tablesqldf

解决方案


到最近的日期之前的滚动连接应该工作得很快..

#data preparation:
# convert to data.tables, set dates as 'real' dates
DT1 <- setDT(Reference.Data)[, Date := as.IDate( Date )]
DT2 <- setDT(Add.Data)[, Order.Date := as.IDate( Order.Date )]
#set keys (this also orders the dates, convenient for the join later)
setkey(DT1, Person, Date)
setkey(DT2, Person, Order.Date)

#perform rolling update join on DT1 
DT1[ DT2, `:=`( Order.date = i.Order.Date, Order = i.Order), roll = -Inf][]

#    Person       Date Order.date Order
# 1:   John 2019-07-10 2019-07-09     1

推荐阅读