2015-05-10 2 views
5

Можно ли использовать отрицание в трубопроводе dplyr?Отрицание `!` В конвейере dplyr `%>%`

для

например
df = data.frame(a = c(T,F,F), b = c(T,T,T)) 

можно написать

!df 

но не могу написать

df %>% ! 

! не является функцией).

В частности, я использую !is.na много, но я не могу включить его в трубопроводы.

ответ

10

Вы можете использовать backticks вокруг !

df %>% 
     `!` 
#  a  b 
#[1,] FALSE FALSE 
#[2,] TRUE FALSE 
#[3,] TRUE FALSE 

За !is.na

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

Обратите внимание, что оператор трубопровода используется в dplyr импортируется из magrittr поэтому для доступа к другим функциям, используйте

library(magrittr) 

См ?extact страницы список общих magrittr дружественных псевдонимов.

В этом случае not() определяется как псевдоним для !

df %>% not 

Чтобы сделать это проще позвонить! Is.na, вы могли бы определить

not_ <- function(x, f) not(f(x)) 
df %>% not_(is.na) 
Смежные вопросы