You should use merge
before subsetting.
Using data.table
:
library(data.table)
merge(data.table(df1,key='p'),
data.table(df2,key='p'))[d==1 & y2 > y1]
p y1 y2 d
1: a 2 3 1
2: c 3 4 1
Using base merge
:
subset(merge(df1,df2), d==1 & y2 > y1)
p y1 y2 d
1 a 2 3 1
6 c 3 4 1
EDIT
For the data.table
solution , here is better to use a join Y[X] , looking up Y's rows using X's key.(LEFT OUTER JOIN)
DF2 <- data.table(df2,key='p')
DF1 <- data.table(df1,key='p')
DF2[DF1][d==1 & y2 > y1]
p y2 d y1
1: a 3 1 2
2: c 4 1 3