【问题标题】:Negation `!` in a dplyr pipeline `%>%`dplyr 管道 `%>%` 中的否定 `!`
【发布时间】:2015-05-10 16:27:42
【问题描述】:

是否可以在 dplyr 管道中使用否定?

例如

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

我会写

!df

但我不会写

df %>% !

(因为! 不是函数)。

特别是,我经常使用!is.na,但我无法将其合并到管道中。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您可以在! 周围使用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
    

    【讨论】:

      【解决方案2】:

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

      library(magrittr)
      

      请参阅?extact 页面以获取常见的 magrittr 友好别名列表。

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

      df %>% not
      

      为了更容易调用 !is.na,您可以定义

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多