data.table中的动态行过滤器向量

时间:2018-06-15 09:35:28

标签: r vector dynamic data.table rowfilter

我有一个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),]

如何解决此问题?

0 个答案:

没有答案