3

通常の data.frame である dplyr の tbl_df の使用に問題があります。大きな tbl_df (500x30K) があり、それをフィルタリングする必要があります。だから私がやりたいことは次のとおりです。

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

これはに似ています

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

よく働く。しかし、実行中にフィルター関数を動的に作成する必要があるため、1 つまたは複数の変数で 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 コードに深く根ざしているようです。

ヒントをいただければ幸いです。また、「文字列から環境変数へ」の変換を指摘することも役に立ちます。

最高で、

マリオ

4

1 に答える 1

4

これは、この問題に関連しています。それまでの間、1 つの方法は、式全体を作成することです。つまり、次のようになります。

> 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
于 2014-04-01T16:02:13.563 に答える