R语言中的full_join、inner_join、left_join和right_join连接

两个dataframe数据之间的连接关系

经常会碰到需要把两个数据进行合并,大的方向有按“列”和按"行"合并两种方式,这里主要讲下按“列”进行合并,如下图,假设有a、b两个数据,注意共有的列是”chr"和“bin";值为1,2,3,4,5的bin是a、b共有的; 值为10,11,12的bin是a独有的;值为6,7,8,9的bin是b独有的;默认是按照共有列进行连接

full_join

我认为从连接后的记录数理解可能更好些,full_join连接后的记录数等于”共有的记录数+a独有的记录数+b独有的记录数“,根据连接键,共有的记录数为5,a独有的记录数为3,b独有的记录数为4,所以为12,结果可以理解为a、b的并集

inner_join

inner_join连接后的记录数等于”共有的记录数“, 也就是5,结果可以理解为a、b的交集,R语言中的merge函数也可以实现

相信你已经猜到left_join和right_join的记录数是多少了

left_join

left_join连接后的记录数等于”a的记录数“,当然,a是需要放在第一个参数,这篇文章讲的都是a作为连接函数的第一个参数值,b作为连接函数的第二个参数值

right_join

right_join连接后的记录数等于”b的记录数“

其他连接

有些人可能看到过semi_joinanti_join连接,semi_join连接其实是在inner_join的结果中只取属于a的字段(也就是列)

而anti_join其实就是a独有的记录

其他语言也是一样的理解!

推荐阅读更多精彩内容

  • MySQL技术内幕:SQL编程 姜承尧 第1章 SQL编程 >> B是由MySQL创始人之一Monty分支的一个版...
    沉默剑士阅读 1,893评论 0 3
  • 5.多表查询 多表查询 目的:从多张表获取数据 前提:进行连接的多张表中有共同的列 等连接 通过两个表具有相同意义...
    乔震阅读 357评论 0 0
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 7,492评论 6 13
  • 1. 小溪里住了一条名叫默默的鱼儿,鼓鼓的眼睛,瘦瘦的身子。早在很小的时候,默默经常听到她的妈妈叹息说:要是有庞大...
    暖阳讲故事阅读 1,179评论 1 3
  • 这年秋天,你开启了我尘封已久的心; 你暖了我的心,我暖了你的手; 你说你很开心,我能感受你心里那抹忧伤; 关于“相...
    跪求一败阅读 143评论 0 0