dplyr包连接数据框(动画版)
2021-03-09 本文已影响0人
R语言数据分析指南
分享一个dplyr处理数据的动态版案例,希望这样能更加直观的解释这些函数的意义,喜欢的小伙伴可以关注我的公众号R语言数据分析指南,持续分享更多优质资源。后台回复dplyr获取文中所有动态图
原文代码:https://mp.weixin.qq.com/s/elSBJJUAhf1DNKPPKkSbSg
library(tidyverse)
x <- dplyr::data_frame(id = 1:3,
x = paste0("x", 1:3))
y <- dplyr::data_frame(id = (1:4)[-3],
y = paste0("y", (1:4)[-3]))
> x
# A tibble: 3 x 2
id x
<int> <chr>
1 1 x1
2 2 x2
3 3 x3
> y
# A tibble: 3 x 2
id y
<int> <chr>
1 1 y1
2 2 y2
3 4 y4
-
Mutating Joins: inner_join(), left_join(), right_join(), full_join()
-
Filtering Joins: semi_join(), anti_join()
-
Set Operations: union(), union_all(), intersect(), setdiff()
突变联接
内部联接
inner_join函数合并两个数据集的变量,但仅保留具有共同ID的行
左连接
与inner_join函数的区别在于,left_join保留了Y与左数据表匹配的行
左联接(y中的额外行)
如果有多个x和y之间的匹配,返回所有组合
右联接
right_join函数保留右侧的所有数据行,如果比较左连接与右连接,则可以看到两个函数都保留相反数据的行
right-join.gif完全联接
full_join函数保留两个输入数据集的所有行,并在其中一个数据帧中缺少ID时插入NA
full-join.gif过滤联接
半连接
semi_join函数仅保留两个数据集共有的行,而仅保留左侧数据集的列
semi-join.gif反联接
anti_join函数仅保留右侧数据中不存在的行,并且仅保留左侧数据中的列
anti-join.gifUnion
全部独特的行,对重复行去重
union.gif全部的行,保持重复
union-all.gifintersect
仅保留唯一行
intersect.gifSet Difference
setdiff.gif setdiff-rev.gif宽表转长表
wide
#> # A tibble: 2 x 4
#> id x y z
#> <int> <chr> <chr> <chr>
#> 1 1 a c e
#> 2 2 b d f
long
#> # A tibble: 6 x 3
#> id key val
#> <int> <chr> <chr>
#> 1 1 x a
#> 2 2 x b
#> 3 1 y c
#> 4 2 y d
#> 5 1 z e
#> 6 2 z f
tidyr-spread-gather.gif