Given:
dat1 <- setDT(data.frame(pat=c("A.C",".BC"),val=c(1,2)))
dat2 <- setDT(data.frame(q=c("ABC","AXC","XBC"),val2=c(10,11,12)))
I want the result to be:
dat3 <- setDT(data.frame(pat=c("A.C","A.C",".BC",".BC"),val=c(1,1,2,2),q=c("ABC","AXC","ABC","XBC"),val2=c(10,11,10,12)))
dat3
pat val x val2
1: A.C 1 ABC 10
2: A.C 1 AXC 11
3: .BC 2 ABC 10
4: .BC 2 XBC 12
In other words, a left join of dat1
to dat2
for each match of regex pattern pat
to query string q
I was wondering if this is possible with the data.table
merge syntax, i.e.
dat1[dat2, .(pat, val, q, val2), on= .(grepl(pat,q))] # this does not work
or any other data.table
trick for efficiency. In reality df1
is hundreds of rows and df2
can be 10-100 thousand rows.