具有相同过滤器代码的不同结果

时间:2019-08-03 14:26:07

标签: r dplyr

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

1 个答案:

答案 0 :(得分:1)

在不使用括号的情况下,示例|中的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)进行修改,以产生与使用第二个表达式相同的结果。