中文 · PDF 215
现在你想找出飞往其中某个目的地的所有航班。你可以自己构造一个过滤器:
flights %>% filter(dest %in% top_dest$dest) #> # A tibble: 141,145 × 19 #> year month day dep_time sched_dep_time dep_delay #> #> 1 2013 1 1 542 540 2 #> 2 2013 1 1 554 600 -6 #> 3 2013 1 1 554 558 -4 #> 4 2013 1 1 555 600 -5 #> 5 2013 1 1 557 600 -3 #> 6 2013 1 1 558 600 -2 #> # ... with 1.411e+05 more rows, and 12 more variables: #> # arr_time , sched_arr_time , arr_delay , #> # carrier , flight , tailnum , origin , #> # dest , air_time , 距离 , 小时 , #> # 分钟 , time_hour
但这种方法很难扩展到多个变量。例如,假设你找到了平均延误时间最高的 10 天。你该如何构造一个使用年、月、日来匹配回航班数据的筛选语句呢?
你可以改用半连接(semi-join),它像变更连接一样连接两个表,但不添加新列,只保留 x 中在 y 里有匹配的行:
flights %>% semi_join(top_dest) #> Joining, by = "dest" #> # A tibble: 141,145 × 19 #> year month day dep_time sched_dep_time dep_delay #> #> 1 2013 1 1 554 558 -4 #> 2 2013 1 1 558 600 -2 #> 3 2013 1 1 608 600 8 #> 4 2013 1 1 629 630 -1 #> 5 2013 1 1 656 700 -4 #> 6 2013 1 1 709 700 9 #> # ... 还有 1.411e+05 行,以及 13 个更多变量: #> # arr_time , sched_arr_time , arr_delay , #> # carrier , flight , tailnum , origin , #> # 目的地 , air_time , distance , hour , #> # minute , time_hour
图形化地,半连接(semi-join)看起来是这样的: