2015-05-10 13 views
5

Ist es möglich, die Negation in der dplyr-Pipeline zu verwenden?Negation `!` In einer dplyr-Pipeline `%>%`

Z. B für

df = data.frame(a = c(T,F,F), b = c(T,T,T)) 

kann ich

!df 

schreiben, aber ich kann nicht

df %>% ! 

(als ! ist keine Funktion) schreiben.

Insbesondere benutze ich eine Menge, aber ich bin nicht in der Lage, es in Pipelines zu integrieren.

Antwort

10

Sie backticks um !

verwenden können, definieren könnte
df %>% 
     `!` 
#  a  b 
#[1,] FALSE FALSE 
#[2,] TRUE FALSE 
#[3,] TRUE FALSE 

Für !is.na

df$a[2] <- NA 
df %>% 
     is.na %>% 
     `!` 
#  a b 
#[1,] TRUE TRUE 
#[2,] FALSE TRUE 
#[3,] TRUE TRUE 
9

Beachten Sie, dass das Rohrleitungsbetreiber in dplyr verwendet von magrittr für den Zugang zu den anderen Funktionen so importiert wird, verwenden

library(magrittr) 

die ?extact Seite für eine Liste von gemeinsamer magrittr freundlicher Aliase sehen.

In diesem Fall not() für !

df %>% not 
als Alias ​​definiert

Um es einfacher zu nennen! Is.na zu machen, Sie

not_ <- function(x, f) not(f(x)) 
df %>% not_(is.na)