【问题标题】:Different results with identical filter code具有相同过滤器代码的不同结果
【发布时间】:2019-08-03 14:26:07
【问题描述】:

我正在hflights 上运行一些 dplyr 函数。

我想知道有多少周末航班的飞行距离超过 1000 英里,但总滑行时间低于 15 分钟?

我认为下面的两组代码应该产生相同的结果 - 有人可以告诉我为什么它们不同吗?

filter(hflights,DayOfWeek==6|DayOfWeek==7 & Distance >1000 & TaxiIn+TaxiOut <15)
A tibble: 2,841 x 21
filter(hflights,DayOfWeek %in% c(6,7) & Distance >1000 & TaxiIn+TaxiOut <15)
A tibble: 155 x 21

【问题讨论】:

  • 对于评估过滤器参数的优先级,使用括号(例如,(DayOfWeek==6 | DayOfWeek==7)) - 然后应该给你相同的结果

标签: r dplyr


【解决方案1】:

在不使用括号的情况下,您的示例 | 中的 or 运算符本质上是将 | 运算符左侧的所有内容与其右侧的所有内容进行比较。因此,第一个表达式DayOfWeek==6|DayOfWeek==7 &amp; Distance &gt;1000 &amp; TaxiIn+TaxiOut &lt;15 生成以下所有内容的输出:

  1. DayOfWeek==6
  2. DayOfWeek==7 &amp; Distance &gt;1000 &amp; TaxiIn+TaxiOut &lt;15

当使用%in% 运算符时,您实际上是在使用| 运算符带有 括号:

  • DayOfWeek %in% c(6,7)(DayOfWeek==6 | DayOfWeek==7) 相同

因此,第二个表达式DayOfWeek %in% c(6,7) &amp; Distance &gt;1000 &amp; TaxiIn+TaxiOut &lt;15 会生成以下所有内容的输出:

  1. DayOfWeek==6 &amp; Distance &gt;1000 &amp; TaxiIn+TaxiOut &lt;15
  2. DayOfWeek==7 &amp; Distance &gt;1000 &amp; TaxiIn+TaxiOut &lt;15

第一个表达式可以用括号修改为filter(hflights,(DayOfWeek==6 | DayOfWeek==7) &amp; Distance &gt;1000 &amp; TaxiIn+TaxiOut &lt;15),以产生与使用第二个表达式相同的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 2021-07-01
    • 2014-05-25
    相关资源
    最近更新 更多