在dplyr管道`%>%`中的取反运算符`!`

11
在dplyr管道中使用否定是否可能?
例如:
df = data.frame(a = c(T,F,F), b = c(T,T,T))

我可以写作

!df

但我不会写

df %>% !

(因为!不是一个函数)。

特别地,我经常使用!is.na,但我无法将其纳入管道中。

2个回答

19
你可以在 ! 周围使用 反引号
 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

13

请注意,在dplyr中使用的管道运算符是从magrittr导入的,因此要访问其他函数,请使用

library(magrittr)

请参阅?extact页面,以获取常见的 magrittr-friendly 别名列表。

在这种情况下,not() 被定义为 ! 的别名。

df %>% not
为了更方便地调用 !is.na,您可以定义:
not_ <- function(x, f) not(f(x))
df %>% not_(is.na)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接