How to filter cases in a data.table by multiple conditions defined in another data.table
data.table, dplyr, r
Solution
setkey(dt1, A)
dt1[dt_filter, allow = T][B != i.B, !'i.B']
# A B C
#1: 1 1 1
#2: 1 1 2
#3: 1 3 1
#4: 1 9 2
#5: 2 1 1
#6: 2 1 2
#7: 2 4 1
#8: 2 5 2
Problem
I wondered whether there is any efficient way to filter a data.table by multiple conditions defined in another data.table. There are 2 data.table in this case: ``` # the filter data.table defines the condition dt_filter<-data.table(A=c(1,2),B=c(8,7)) # dt1 the data.table to be filtered dt1<-data.table(A=rep(c(1,2),5),B=c(8,4,3,1,1,5,9,7,1,1),C=c(rep(1,5),rep(2,5))) ls_tmp<-lapply (1:nrow(dt_filter),function(i){ # exclude the record with the A&B defined the filter dt1_add<-dt1[A==dt_filter[[i,1]]&B!=dt_filter[[i,2]]] }) result<- rbindlist(ls_tmp) ``` It seems my sample is not efficient because of lapply loop. I am not sure how to re-write it by some other way.