фильтровать dblyr tbl_df, используя имена переменных

У меня возникли проблемы с использованием 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.

Буду благодарен за любой намек. Также было бы полезно указать на преобразование «строка в переменную окружения», так как я очень рад, что делаю это неправильно.

С лучшими,

Марио

3

Решение

Это связано с этим вопрос. Между тем, одним из способов может быть построение целого выражения, т.е.

> 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
4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector