2014-04-01 29 views
3

我在使用dplyr的tbl_df時分別遇到了常規data.frame問題。我有一個很大的tbl_df(500x30K),需要過濾它。 所以我想這樣做是:使用變量名稱篩選dplyr的tbl_df

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的代碼。

我會感謝任何提示。同時指出「字符串到環境變量」的轉換會有所幫助,因爲我很漂亮,我做錯了。

效果最佳,

馬里奧

回答

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 
+0

很好,非常感謝。 – mariodeng