【发布时间】:2019-10-20 13:30:37
【问题描述】:
更新:我认为这主要是我想要的,但现在我有多个匹配项。这是我认为的另一个问题。能够为非 equi 连接组合滚动连接会很好。
df2[ copy(df1)[, `:=`(TargDate2 = TargDate + hours(4) , TargDate1 = TargDate -hours(4) )],
`:=`( Value = i.Value, TargDate.df1 = TargDate ),
on = .(ID == ID, TargDate >= TargDate1, TargDate <= TargDate2) ]
有没有办法使用 data.table 包中的滚动连接来匹配基于某个约束(例如,4 小时)内最近的日期时间值的两个数据框,但保留两个表的所有值(例如:合并(...,所有=T))?
library(data.table)
library(lubridate)
set.seed(1)
df1 <- data.frame(ID=sample(1:3,10, replace=T),TargDate=ymd_hms(Sys.time() + sort(sample(1e2:1e5, 10))),
Value=rnorm(10,10,0.5) )
set.seed(21)
df2 <- data.frame(ID=sample(1:3,20, replace=T), TargDate=ymd_hms(Sys.time() + sort(sample(1e2:1e5, 20))),
ValueMatch=rnorm(20,50,15) )
setDT(df1)
setDT(df2)
setkey(df2, ID, TargDate)[, dateMatch:=TargDate]
# This is an inner match to df1 with DateTarg and Value from df1
# and ValueMatch and dateMatch from df2
df2[df1, roll="nearest"]
# 60 seconds * 60 minutes * 4 hours
four_hours <- 60*60*4
df2[df1, roll=-four_hours]
包含 df1 和 df2 中所有行的数据框,匹配的行合并。
【问题讨论】:
-
Tiffany,您能否提供一个您希望看到的理想数据框?
标签: r data.table