R语言ETL工程:连接(join)

本文详细介绍了R语言中的数据表连接操作,包括内连接、全连接、左连接、右连接以及半连接和反连接。通过实例展示了如何使用dplyr包中的函数进行各种连接,并解释了连接在数据整合中的重要性。此外,还提到了基于多个列进行连接的方法和注意事项。
摘要由CSDN通过智能技术生成

640?wx_fmt=png

作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深R语言在业界的应用。

邮箱:huang.tian-yuan@qq.com


本章将会介绍如何在R中完成数据表的连接操作。首先要明确一个问题:为什么要进行连接?本质上来说,连接就是按照一定的对应规则,把两个表格合并为一个表格的操作。举个例子:比如我们一张表格中有乐队的歌手名字和他们所属的乐队,另一张表格有歌手的名字和他们擅长的乐器类型。因为两张表格都含有歌手的名字,而歌手的名字也是唯一的(在数据库理论框架中,这个属性被称为主键),即不存在一张表格会重复出现同一个歌手的名字。这个时候,我们就希望把两张表格合并起来,做一张包含歌手名字、所属乐队、擅长乐器的大表格。通过连接,我们能够把众多表格的数据合并起来,从而让孤立的数据能够联系在一起。


本章会采用较为简单的数据集进行实现,下面我们会参考dplyr的帮助文档举例,前期准备如下:


 
 

1library(tidyverse)
2band_members
3
4#
# # A tibble: 3 x 2
5## name band 
6## <chr> <chr> 
7## 1 Mick Stones 
8## 2 John Beatles
9## 3 Paul Beatles
10
11band_instruments
12
13#
# # A tibble: 3 x 2
14## name plays 
15## <chr> <chr> 
16## 1 John guitar
17## 2 Paul bass 
18## 3 Keith guitar
19
20band_instruments2
21
22#
# # A tibble: 3 x 2
23## artist plays 
24## <chr> <chr> 
25## 1 John guitar
26## 2 Paul bass 
27## 3 Keith guitar


观察表格,我们可以知道,band_members包含了歌手名称和乐队信息,band_instruments包含歌手名称和乐器信息,band_instruments2与band_instrument包含的信息一样,但是歌手名称的列名称由name变化为artist。


基本概念

连接分为很多种,包括内连接、全链接、左连接、右连接等。我们先介绍一些基础的逻辑,先看下面这张图:

640?wx_fmt=jpeg


下面我们逐个讲解这些连接的概念。 首先我们来讲内连接,又叫做自然连接。还是歌手、乐队、乐器的例子,比如我们的A表格中有歌手名称和乐队的信息,B表格中有歌手名称和擅长乐器的信息。另外,我们发现两张表格中,A表格包含的歌手信息和B表格不同,有的歌手只有A表格有,B表格就没有;有的歌手只有B表格有,但是A表格没有。但是我们还是希望把A表格和B表格连接起来,形成一个大表格C。采用内连接的话,就会把A表格和B表格都有的歌手提取出来(也就是取了一个交集),然后对两个表格的列进行连接。


下面介绍左连接和右连接。如果是A表格左连接B表格的话,那么就是A表格的歌手肯定全部保留,如果在A里面有的歌手,在B中找不到,那么就需要填充缺失值,一切以A表格为主。理解了左连接,右连接就非常简单了,它其实就是左连接的逆运算,也就是说A右连接B,实际就是B左连接A。就是这么简单。 最后我们讲一下全连接。全连接就是A表格B表格的歌手我们统统都保留,但是如果A表格有的歌手B表格没有,那么在B表格的列中就需要填充缺失值;同理,如果B表格的歌手A没有,那么A表格带来的列也需要填充缺失值。


如果还是不理解,可以看一下下面这一张图片。

640?wx_fmt=jpeg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值