2014-04-01 4 views
3

dplyr의 tbl_df, 각각 일반 data.frame을 사용하는 데 문제가 있습니다. 큰 tbl_df (500x30K)가있어 필터링해야합니다. 그래서 내가하고 싶은 것은 :변수 이름을 사용하여 dplyr의 tbl_df를 필터링하십시오.

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

훌륭한 작품과 유사 할 것

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

. 하지만 실행하는 동안 필터 함수를 동적으로 작성해야하므로 하나 이상의 변수로 DF/tbl_df 열에 액세스해야합니다. LGLSXP 와 가 호환되지 않습니다이 깊이 CPP 코드에 뿌리를두고있는 것 같다 : 나에게 오류를 제공

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

: 내가 좋아하는 뭔가를 시도했다.

나는 어떤 힌트에도 감사 할 것입니다. 또한 "환경 변수 변수"변환을 지적하면 도움이 될 것입니다. 왜냐하면 제가 잘못하고 있기 때문입니다. 최고와

,

마리오

답변

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

관련 문제