【问题标题】:filter based on negative statement in R dplyr基于R dplyr中的否定陈述过滤
【发布时间】:2020-04-11 15:02:53
【问题描述】:

我基于由&运营商加入了一个否定句我试图过滤器。在积极的表态给了我正确的东西,我不想要,但不知何故,当我在!加来表示否定声明(例如,!(logic1 & logic2)),这不是正确的返回。 P>

下面是具体的,我想用的ID是坏的,标记为列“没有好”排除行tag

bad <- c(101, 103, 107, 110)

以下积极的语句返回正确的行,我不想: P>

df %>%
 filter(ID %in% bad & tag == "no good")

于是我加入!指示负:

df %>% filter (!(ID %in% bad & tag == "no good"))

不知何故,这踢出乡亲匹配bad无论tag“没有好”的ID。督察,以匹配bad ID的人被踢出即使tag是空白的(NA_character_)。

什么我在这里做错了吗? P>

谢谢!

【问题讨论】:

    标签: r filter dplyr


    【解决方案1】:

    我们可以修改为|

    library(dplyr)
    df %>% 
         filter (!(ID %in% bad | tag == "no good"))
    #    ID  tag
    #1 105 good
    #2 109 good
    

    数据

    bad <- c(101, 103, 107, 110)
    df  <- data.frame(ID=c(101:110),tag = rep(c("good","no good"),5))
    

    【讨论】:

      【解决方案2】:

      @phoebe 您可以使用稍微修改的方法获得所需的输出

      df %>% filter (!(ID %in% bad) & tag != "no good")
      

      生成测试数据框df

      bad <- c(101, 103, 107, 110)
      df  <- data.frame(ID=c(101:110),tag = rep(c("good","no good"),5))
      > df
          ID     tag
      1  101    good
      2  102 no good
      3  103    good
      4  104 no good
      5  105    good
      6  106 no good
      7  107    good
      8  108 no good
      9  109    good
      10 110 no good
      

      检查输出

      library(dplyr)
      > df %>% filter (!(ID %in% bad) & tag != "no good")
         ID  tag
      1 105 good
      2 109 good
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-23
        • 2023-03-21
        • 2018-02-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多