←
PDF 214 / 520 Filtering Joins
→
English · PDF 214
Original PDF page 214
中文 · PDF 214
dplyr SQL
right_join(x, y, by = "z") SELECT * FROM x RIGHT OUTER JOIN y
full_join(x, y, by = "z") SELECT * FROM x FULL OUTER JOIN y

注意 "INNER" 和 "OUTER" 是可选的,通常会被省略。

当连接两个表之间不同的变量时,例如 inner_join(x, y, by = c("a" = "b")),SQL 中使用的语法略有不同:SELECT * FROM x INNER JOIN y ON x.a = y.b。正如这种语法所暗示的,SQL 支持比 dplyr 更广泛的连接类型,因为你可以使用相等以外的约束来连接表(有时称为非等值连接)。

过滤连接

过滤连接与变动连接以相同的方式匹配观测,但它影响的是观测,而不是变量。有两种类型:

  • semi_join(x, y) 保留 x 中所有在 y 中有匹配的观测。
  • anti_join(x, y) 丢弃 x 中所有在 y 中有匹配的观测。

半连接对于将过滤后的汇总表匹配回原始行非常有用。例如,假设你找到了最受欢迎的前 10 个目的地:

top_dest <- flights %>% count(dest, sort = TRUE) %>% head(10) top_dest #> # A tibble: 10 × 2 #> dest n #> #> 1 ORD 17283 #> 2 ATL 17215 #> 3 LAX 16174 #> 4 BOS 15508 #> 5 MCO 14082 #> 6 CLT 14064 #> # ... 还有 4 行