我正在研究R for Data Science,并试图找到前10名的延迟航班。我正在使用min_rank来创建每个航班的排名,然后尝试过滤出前10名。我敢肯定我错过了一些简单的事情,但是我得到的结果确实很奇怪,很想解释一个原因,以便将来避免这种情况。
要过滤掉,我使用了x%in%var和== x,但是两者给出的结果不同
library(nycflights13)
library(tidyverse)
flights <- nycflights13::flights
x <- 1:10
select(flights, arr_delay, carrier) %>%
mutate(delay_rank = min_rank(desc(arr_delay))) %>%
filter(delay_rank == x %in% delay_rank)
select(flights, arr_delay, carrier) %>%
mutate(delay_rank = min_rank(desc(arr_delay))) %>%
filter(delay_rank == x)
第一个块仅给出第一个结果,而其他第9个都不给出
第二个块给出9,8,4,但其他前10个都不给出。
我希望对前10个结果有所了解。
答案 0 :(得分:1)
对于多元素比较,我们使用%in%
而不是==
。在第一次尝试中,不需要delay_rank ==
,只需使用delay_rank %in% x
即可提取出其中'delay_rank'与'x'元素之一匹配的行
select(flights, arr_delay, carrier) %>%
mutate(delay_rank = min_rank(desc(arr_delay))) %>%
filter(delay_rank %in% x)
要了解其工作原理,请检查
(1:5) == (2:3)
在这里,有2、3的循环,直到满足lhs向量的长度。如果第二个向量循环的长度未完成,也会发出警告
(1:5) == c(2, 3, 2, 3, 2)
在第二种情况下,使用%in%
(1:5) %in% (2:3)
检查数字2、3是否与向量中的任何地方匹配