所涉及的函数
Mutating Joins:
inner_join()
,left_join()
,right_join()
,full_join()
Filtering Joins:
semi_join()
,anti_join()
深入了解学习的内容
- 《R for data science》
- Relational Data
- gganimate 作者用来制作动图的包
数据类型
x <- tribble(
~key, ~val_x,
1, "x1",
2, "x2",
3, "x3")
y <- tribble(
~key, ~val_y,
1, "y1",
2, "y2",
4, "y3")
y1 <- tribble(
~key, ~val_y,
1, "y1",
2, "y2",
4, "y4",
2, "y5")
合并连接
内连接
inner_join 函数
- 内连接的结果是一个新数据框,其中包含键、 x 值和 y 值。我们使用 by 参数告诉 dplyr 哪个变量是键:
x %>% inner_join(y, by = "key")
# A tibble: 2 x 3
key val_x val_y
<dbl> <chr> <chr>
1 1 x1 y1
2 2 x2 y2
外连接
- 内连接保留同时存在于两个表中的观测, 外连接则保留至少存在于一个表中的观测。外连
接有 3 种类型。
• 左连接:保留 x 中的所有观测。
• 右连接:保留 y 中的所有观测
• 全连接:保留 x 和 y 中的所有观测。
left_join函数
- 左连接:保留 x 中的所有观测。
> left_join(x, y, by = "key")
# A tibble: 3 x 3
key val_x val_y
<dbl> <chr> <chr>
1 1 x1 y1
2 2 x2 y2
3 3 x3 NA
如果x中的key变量,在y中有多个同样的key,那么所有的结合可能都会罗列出来
> left_join(x, y1, by = "key")
# A tibble: 4 x 3
key val_x val_y
<dbl> <chr> <chr>
1 1 x1 y1
2 2 x2 y2
3 2 x2 y5
4 3 x3 NA
right_join函数
- 右连接:保留 y 中的所有观测
> right_join(x, y, by = "key")
# A tibble: 3 x 3
key val_x val_y
<dbl> <chr> <chr>
1 1 x1 y1
2 2 x2 y2
3 4 NA y3
full_join函数
- 全连接:保留 x 和 y 中的所有观测。
> full_join(x, y, by = "key")
# A tibble: 4 x 3
key val_x val_y
<dbl> <chr> <chr>
1 1 x1 y1
2 2 x2 y2
3 3 x3 NA
4 4 NA y3
使用维恩图表示不同类型连接方式
dplyr中这些连接函数对应基础函数merge中的功能表
dplyr这几种函数的来源SQL中对应的功能
筛选连接
- 筛选连接匹配观测的方式与合并连接相同,但前者影响的是观测,而不是变量。筛选连接
有两种类型。
• semi_join(x, y): 保留 x 表中与 y 表中的观测相匹配的所有观测。
• anti_join(x, y): 丢弃 x 表中与 y 表中的观测相匹配的所有观测。
semi_join函数
- 保留 x 表中与 y 表中的观测相匹配的所有观测
> semi_join(x, y, by = "key")
# A tibble: 2 x 2
key val_x
<dbl> <chr>
1 1 x1
2 2 x2
anti_join函数
- 丢弃 x 表中与 y 表中的观测相匹配的所有观测。
> anti_join(x, y, by = "key")
# A tibble: 1 x 2
key val_x
<dbl> <chr>
1 3 x3
参考博文:
图中gif文件来源,tiwtter上逛#rstat(类似微博话题)专题时看到的大神的操作
https://github.com/gadenbuie/tidy-animated-verbs#relational-data
参考书籍
英文版:《R for data science》
中文版:《R数据科学》