我有两个表称为dates
和items
:
#dates table
from <- c(as.Date("2022/1/1"), as.Date("2022/3/1"), as.Date("2022/5/1"))
to <- c(as.Date("2022/1/25"), as.Date("2022/3/17"), as.Date("2022/5/30"))
id <- c(1,1,2)
dates <- data.frame(from, to, id)
#items table
item_id <- c(1, 1, 2)
date <- c(as.Date("2022/1/5"), as.Date("2022/3/4"), as.Date("2022/1/4"))
items <-data.frame(item_id, date)
#end result
from <- c(as.Date("2022/1/1"), as.Date("2022/3/1"), NA)
to <- c(as.Date("2022/1/25"), as.Date("2022/3/17"), NA)
end_result <- data.frame(item_id, date, from, to)
dfdates
需要连接到items
df,其中 id 匹配,并且 df 的日期items
位于 df 的起始日期和终止日期之间dates
。数据end_result
框显示了预期的结果。
有人对如何实现这一目标有任何建议吗?
1) sqldf使用指定的连接条件将项目左连接到日期。from 和 to 是 SQL 保留字,因此请将它们放在方括号中。
2) dplyr 其工作原理相同。
一个
data.table
办法:上面分配给一个新表,但您可以通过就地
end_result
更新来避免制作整个数据的额外副本。items
只需从 开始,setDT(items)[dates,
而不是end_result <- as.data.table(items)[dates,
.