dplyr包连接数据框(动画版)

分享一个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    
   
1     1 x1   
2     2 x2   
3     3 x3   
> y
# A tibble: 3 x 2
     id y    
   
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的行

dplyr包连接数据框(动画版)_第1张图片

左连接

与inner_join函数的区别在于,left_join保留了Y与左数据表匹配的行

dplyr包连接数据框(动画版)_第2张图片

左联接(y中的额外行)

如果有多个x和y之间的匹配,返回所有组合

dplyr包连接数据框(动画版)_第3张图片

右联接

right_join函数保留右侧的所有数据行,如果比较左连接与右连接,则可以看到两个函数都保留相反数据的行

dplyr包连接数据框(动画版)_第4张图片
right-join.gif

完全联接

full_join函数保留两个输入数据集的所有行,并在其中一个数据帧中缺少ID时插入NA

full-join.gif

过滤联接

半连接

semi_join函数仅保留两个数据集共有的行,而仅保留左侧数据集的列

dplyr包连接数据框(动画版)_第5张图片
semi-join.gif

反联接

anti_join函数仅保留右侧数据中不存在的行,并且仅保留左侧数据中的列

anti-join.gif

Union

全部独特的行,对重复行去重

dplyr包连接数据框(动画版)_第6张图片
union.gif

全部的行,保持重复

dplyr包连接数据框(动画版)_第7张图片
union-all.gif

intersect

仅保留唯一行

intersect.gif

Set Difference

dplyr包连接数据框(动画版)_第8张图片
setdiff.gif
dplyr包连接数据框(动画版)_第9张图片
setdiff-rev.gif

宽表转长表

wide
#> # A tibble: 2 x 4
#>      id x     y     z    
#>      
#> 1     1 a     c     e    
#> 2     2 b     d     f
long
#> # A tibble: 6 x 3
#>      id key   val  
#>     
#> 1     1 x     a    
#> 2     2 x     b    
#> 3     1 y     c    
#> 4     2 y     d    
#> 5     1 z     e    
#> 6     2 z     f
dplyr包连接数据框(动画版)_第10张图片
tidyr-spread-gather.gif

你可能感兴趣的:(dplyr包连接数据框(动画版))