[英]Replace inner_join with semi_join
下面的代码按预期方式工作。 执行直到并包括line head(1)
,我发现JFK到LAX是航班最多的航线。 然后,我使用inner_join
过滤flights
表,使其仅包括该路线上的航班。 这给了我11,252行。
library(nycflights13)
library(dplyr)
flights %>%
group_by(origin, dest) %>%
summarize(num_flights=n()) %>%
arrange(-num_flights) %>%
head(1) %>% # JFK to LAX has the most flights
select(origin, dest) %>%
inner_join(flights, by=c("origin", "dest"))
我该如何使用semi_join
达到相同的目标? 我想要上面一行代码,而不是使用temp变量。 但是,如果我用temp变量编写它,它将看起来像这样。 结果相同:
filterList <- flights %>%
group_by(origin, dest) %>%
summarize(num_flights=n()) %>%
arrange(-num_flights) %>%
head(1) %>%
select(origin, dest)
semi_join(flights, filterList, by=c("origin", "dest") )
我想保持类似的逻辑,以便首先确定过滤器,然后再应用它。 我想我会对right_semi_join
函数感兴趣,但这并不存在。
在不使用联接的情况下选择航班最多的路线
library(nycflights13)
library(dplyr)
df2 <- flights %>%
add_count(origin, dest) %>%
top_n(1)
df2$n <- NULL
> setequal(df1, df2) # assuming original data.frame is stored in df1
TRUE
使用.
将链数据放入第二个参数,而不是第一个。
flights %>%
group_by(origin, dest) %>%
summarize(num_flights=n()) %>%
arrange(-num_flights) %>%
head(1) %>% # JFK to LAX has the most flights
select(origin, dest) %>%
semi_join(flights, ., by=c("origin", "dest"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.