【问题标题】:Dplyr ~ select something, exceptDplyr ~ 选择一些东西,除了
【发布时间】:2023-03-08 23:26:01
【问题描述】:

所以我有以下代码:

library (dplyr)
dataset1 <- filter(dataset0, dataset0$type == "black" | dataset0$type == "orange")

这段代码的作用是在 dataset1 中添加 type = "black" 或 type = "orange" 的每一行 dataset0。

如果我想拿除橙色和黑色以外的所有东西怎么办。以下是正确的吗?

library (dplyr)
dataset1 <- filter(dataset0, dataset0$type != "black" | dataset0$type != "orange")

提前谢谢你。

【问题讨论】:

    标签: r exception filter dplyr


    【解决方案1】:

    一种方法可能是:

     dataset1 <- filter(dataset0, !(dataset0$type == "black" | dataset0$type == "orange") )
    

    您的建议不正确。当您否定一个复合表达式时,如果您不否定整个表达式,则需要将 OR 更改为 AND。

    dataset1 <- filter(dataset0, dataset0$type != "black" & dataset0$type != "orange")
    

    这与 dplyr 无关。这只是基本逻辑。我还怀疑您不应该在逻辑表达式中包含带有“$”运算符的数据框名称。试试:

    dataset1 <- filter(dataset0, !(type == "black" | type == "orange") )
    

    【讨论】:

    • 尝试了上述方法,但它们似乎无法正常工作。也许是因为将“或”更改为“和”,因为它在下面的评论中提到〜我不确定。 :/ 我收到的结果很奇怪,有些单元格已被删除,但我不明白是哪个。
    • 我提供的逻辑在一个小例子中提供了正确的结果。我不知道你为什么会得到不寻常的结果。您需要发布一个示例来展示您所看到的内容。我建议使用 dput() 来构建示例,因为这样最有可能提供可重现的示例。
    • 成功了!我不明白为什么,但我试过了: dataset1
    【解决方案2】:

    您必须将“或”更改为“和”,就像这样

    首先,制作一些假数据

    type <- c(rep("black", 5), rep("orange", 5), rep("green", 5))
    dataset0 <- as.data.frame(type)
    

    现在在你的逻辑语句中使用&amp; 子集

    dataset1 <- filter(dataset0, dataset0$type != "black" & dataset0$type != "orange")
    

    如果您不将| 更改为&amp;,您将取回原始数据框(包括橙色和黑色),如下所示:

    dataset1 <- filter(dataset0, dataset0$type != "black" | dataset0$type != "orange")
    dataset1
         type
    1   black
    2   black
    3   black
    4   black
    5   black
    6  orange
    7  orange
    8  orange
    9  orange
    10 orange
    11  green
    12  green
    13  green
    14  green
    15  green
    

    【讨论】:

    • 您好,感谢您的评论。我不太了解您提到的类型的用法。我的意思是,我不知道“黑色”和“橙色”的确切数量我只是希望它们被删除(根据它们旁边的数字和您提供的数据框来判断,它是它们的总和,对吧?)我明白你在最后两行做了什么,但我不明白第一行的目的,如果可能的话,我会请求解释。提前谢谢你。
    • 很抱歉,前两行只是设置了一些假数据,所以你可以看到使用效果 |或 & 在过滤语句中。不管有多少条记录,过滤器语句都会起作用,但是由于您没有提供数据,所以我做了一些测试来测试两个不同的过滤器语句。
    猜你喜欢
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多