2014-07-07 18 views
10

Vorrei essere in grado di definire gli argomenti per dplyr verbiPassando stringhe come argomenti di verbi dplyr

condition <- "dist > 50" 

e quindi utilizzare queste stringhe in dplyr funzioni:

require(ggplot2) 
ds <- cars 
ds1 <- ds %>% 
    filter (eval(condition)) 
ds1 

Ma getta per errore

Error: filter condition does not evaluate to a logical vector. 

Il codice deve essere valutato come:

ds1<- ds %>% 
    filter(dist > 50) 
    ds1 

Con conseguente:

DS1

speed dist 
1  14 60 
2  14 80 
3  15 54 
4  18 56 
5  18 76 
6  18 84 
7  19 68 
8  20 52 
9  20 56 
10 20 64 
11 22 66 
12 23 54 
13 24 70 
14 24 92 
15 24 93 
16 24 120 
17 25 85 

Domanda:

Come passare una stringa come argomento in un dplyr verbo?

+0

A quanto mi risulta , questo è un [work in progress] (https://github.com/hadley/dplyr/issues/352) – AndrewMacDonald

+0

E ora è completato e parte dell'installazione standard 'dplyr'. – Gregor

risposta

2

mentre sono lavorando su questo, qui è una soluzione utilizza if:

library(dplyr) 
library(magrittr) 

ds <- data.frame(attend = c(1:5,NA,7:9,NA,NA,12)) 

filter_na <- FALSE 

filtertest <- function(x,filterTF = filter_na){ 
    if(filterTF) x else !(x) 
} 

ds %>% 
    filter(attend %>% is.na %>% filtertest) 

    attend 
1  1 
2  2 
3  3 
4  4 
5  5 
6  7 
7  8 
8  9 
9  12 

filter_na <- TRUE 
ds %>% 
    filter(attend %>% is.na %>% filtertest) 

    attend 
1  NA 
2  NA 
3  NA 
+0

grazie, @AndrewMacDonald! scusa, per non aver offerto un esempio riproducibile in precedenza – andrey

+0

grande, grazie @AndrewMacDonald, questo funziona e in cima mi dà un semplice esempio di utilizzo della funzione con dplyr - qualcosa che volevo avere per riferimento. Grazie ancora! – andrey

+1

contento che sia stato utile! L'ho editato poco sopra (non si dovrebbe usare '$' all'interno di 'filter'! – AndrewMacDonald

11

Nella prossima versione di dplyr, probabilmente funzionerà in questo modo:

condition <- quote(dist > 50) 

mtcars %>% 
    filter_(condition) 
+0

non vedo l'ora, dplyr continua a sorprendermi con la sua intuitività e intelligenza Grazie, Hadley! – andrey

+2

E 'già disponibile horaaa – Espanta