我有一个data.table -
DT<-data.table(ACT=c("Media","nonMedia","Media","TV"), MESSAGE = c("Standalone","other","other","Standalone"))
ACT MESSAGE
Media Standalone
nonMedia other
Media other
TV Standalone
我有2个带值的向量: -
ACT=c("Media","TV")
MESSAGE = c("Standalone")
我必须制作行级动态过滤器,因为这些向量会不断变化。过滤器将是:
DT[!(ACT %in% c('Media','TV')) & !(MESSAGE %in% c('Standalone')),]
到目前为止我所取得的成就 -
filter_Members<-c("ACT","MESSAGE")
filterElements <- list()
filterElements<-lapply(filter_Members, function(x) paste0("!(",paste0(x, " %in% ", paste0("'",get(x),"'")),")", collapse = " & "))
filterCond <- paste0(filterElements, collapse = " & ")
> filterCond
[1] "!(ACT %in% 'Media') & !(ACT %in% 'TV') & !(MESSAGE %in% 'Standalone')"
问题是,如果我们使用这个条件,它会以字符向量的形式给出错误。
> DT[filterCond,] Error in `[.data.table`(DT, filterCond, )
现在,如果我们在没有双引号的情况下使用这个条件,那么它可以工作 -
DT[!(ACT %in% 'Media') & !(ACT %in% 'TV') & !(MESSAGE %in% 'Standalone'),]
结果 -
ACT MESSAGE
nonMedia other
我尝试过以下两种方法,但都没有效果。
DT[noquote(filtercond),]
DT[eval(filtercond),]
如何解决此问题?