首页 > 解决方案 > 具有相同过滤器代码的不同结果

问题描述

我在 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

标签: rdplyr

解决方案


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

  1. DayOfWeek==6
    • 或者
  2. DayOfWeek==7 & Distance >1000 & TaxiIn+TaxiOut <15

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

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

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

  1. DayOfWeek==6 & Distance >1000 & TaxiIn+TaxiOut <15
    • 或者
  2. DayOfWeek==7 & Distance >1000 & TaxiIn+TaxiOut <15

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


推荐阅读