使用变量名过滤dplyr' tbl_df

时间:2014-04-01 09:40:05

标签: c++ r filter environment dplyr

我无法分别使用dplyr的tbl_df和常规data.frame。我有一个大的tbl_df(500x30K),需要过滤它。 所以我想做的是:

filter(my.tbl_df, row1>0, row10<0)

类似
df[df$row1>0 & df$row10<0,]

效果很好。但我需要在运行时动态构建过滤器函数,因此我需要通过一个或多个变量访问DF / tbl_df列。 我试过像:

var=c("row1","row10")
op=c(">","<")
val=c(0,0)
filter(my.tbl_df, eval(parse(text=paste(var,op,val,sep="")))

这给了我一个错误:与LGLSXP不兼容 这似乎深深植根于Cpp代码。

我会感谢任何提示。同时将&#34;字符串指向环境变量&#34;转换会有所帮助,因为我很好,我做错了。

最好的,

马里奥

1 个答案:

答案 0 :(得分:4)

这与此issue有关。与此同时,一种方法可能是构建整个表达,即:

> my.tbl_df <- data.frame( row1 = -5:5, row10 = 5:-5)
> call <- parse( text = sprintf( "filter(my.tbl_df, %s)", paste(var,op,val, collapse="&") ) )
> call 
expression(filter(my.tbl_df, row1 > 0&row10 < 0))
> eval( call )
  row1 row10
1    1    -1
2    2    -2
3    3    -3
4    4    -4
5    5    -5