【发布时间】:2020-07-16 18:29:18
【问题描述】:
当我遇到一个奇怪的结果时,我正在使用 R4DS 并了解 filter() 函数。我试图 filter 和 tibble 只找到 dep_delay 和 arr_delay 不到 2 分钟的观察结果。这是我的代表:
library(tidyverse)
library(nycflights13)
filter(flights, dep_delay & arr_delay < 2)
正确输出
# A tibble: 187,645 x 19
year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay
<int> <int> <int> <int> <int> <dbl> <int> <int> <dbl>
1 2013 1 1 544 545 -1 1004 1022 -18
2 2013 1 1 554 600 -6 812 837 -25
3 2013 1 1 557 600 -3 709 723 -14
4 2013 1 1 557 600 -3 838 846 -8
5 2013 1 1 558 600 -2 849 851 -2
6 2013 1 1 558 600 -2 853 856 -3
7 2013 1 1 558 600 -2 923 937 -14
8 2013 1 1 559 600 -1 854 902 -8
9 2013 1 1 601 600 1 844 850 -6
10 2013 1 1 602 610 -8 812 820 -8
# ... with 187,635 more rows, and 10 more variables: carrier <chr>, flight <int>,
# tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>, hour <dbl>,
# minute <dbl>, time_hour <dttm>
但是,如果我出于某种原因添加括号,输出会发生变化
filter(flights, (dep_delay & arr_delay) < 2)
# A tibble: 327,394 x 19
year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay
<int> <int> <int> <int> <int> <dbl> <int> <int> <dbl>
1 2013 1 1 517 515 2 830 819 11
2 2013 1 1 533 529 4 850 830 20
3 2013 1 1 542 540 2 923 850 33
4 2013 1 1 544 545 -1 1004 1022 -18
5 2013 1 1 554 600 -6 812 837 -25
6 2013 1 1 554 558 -4 740 728 12
7 2013 1 1 555 600 -5 913 854 19
8 2013 1 1 557 600 -3 709 723 -14
9 2013 1 1 557 600 -3 838 846 -8
10 2013 1 1 558 600 -2 753 745 8
# ... with 327,384 more rows, and 10 more variables: carrier <chr>, flight <int>,
# tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>, hour <dbl>,
# minute <dbl>, time_hour <dttm>
注意第 2 行的两个变量的值都不正确。起初我想也许通过添加括号我将(dep_delay & arr_delay) 转换为TRUE 或1 但实际上会产生完全不同的输出。谁能帮我理解发生了什么?
【问题讨论】: