library(data.table)
#create data
A <- data.table(id=rep(1:10, each=40000), date=rep(Sys.Date()-99:0, 4000), ret=rnorm(400000))
B <- data.table(id=rep(1:5, each=10), date=rep(Sys.Date()-99:0), ret=rnorm(50))
#find dates to compare against
n <- NROW(B)
B_long <- B[,.(id = rep(id,each=10),date = rep(date,each=10))]
s <- rep(-10:-1,n)
B_long[,date:=date + s]
#information in one column
B_long$com <- as.numeric(paste0(B_long$id,as.numeric(B$date)))
A$com <- as.numeric(paste0(A$id,as.numeric(A$date)))
#compare
setkey(A,com)
X <- A[com %in% B_long$com,]
该答案建立在理查兹的答案之上,但更针对该问题。
关键思想是建立一个 id 日期组合向量来进行比较。这发生在第二个代码块中。
我的解决方案使用 data.table 包,但应该对 data.frame 进行一些语法更改。但是使用 data.table 包有 keycolumns 的优势。
如果您仍然遇到问题,可以将此方法与约翰的第二个答案和第一个作物 A 配对。