1

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

我该如何解决这个问题?

4

0 回答 0