【问题标题】:filter dplyr's tbl_df using variable names使用变量名过滤 dplyr 的 tbl_df
【发布时间】:2014-05-11 23:59:41
【问题描述】:

我在使用 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 代码中。

如果有任何提示,我将不胜感激。还指出“字符串到环境变量”的转换会很有帮助,因为我很高兴我做错了。

最好的,

马里奥

【问题讨论】:

    标签: c++ r filter environment dplyr


    【解决方案1】:

    这与此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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 2018-11-17
      • 1970-01-01
      相关资源
      最近更新 更多