本文概述
- 连接数据集
- 主键和外键
- 联接类型
- 缺少键
- 最后的想法
本教程将指导你完成以下操作:
- 水平和垂直合并数据集
- 什么是主键, 以及它们如何为你的数据添加结构
- 不同类型的联接(例如, 左联接, 内部联接, 完全联接)以及如何在其中进行选择
- 需要注意的常见问题以及解决方法
垂直添加数据集
当多个数据集具有相同的列集时, 可以将一个数据集垂直连接到另一个。也就是说, 保留数据集的列, 可以向其中添加更多行。将此类信息保存在一个文件中将使你更轻松地进行汇总和查看大图, 而无需在多个文件之间来回切换并避免跟踪。
数据集1
使 | 当然模型 |
---|---|
本田 | 63 |
宝马 | 10 |
使 | 当然模型 |
---|---|
福特汽车 | 26 |
特斯拉 | 4 |
在你的工作区中, 有两个数据集, 分别在上面看到。尝试对数据集1的列重新排序。在数据集1和数据集2以及reordered_dataset1和数据集2上调用rbind()。
在rbind()之后, 你的结果应该在一张表中包含所有四种汽车制造商的信息, 如下所示:
垂直串联数据集
使 | 当然模型 |
---|---|
本田 | 63 |
宝马 | 10 |
福特汽车 | 26 |
特斯拉 | 4 |
当你拥有代表同一组观测值的数据集时, 可以将这些数据集水平合并。这次, 保留数据集的行, 可以向其中添加更多列。在这种情况下, 你应该检查观察顺序是否相同。如果数据集的行数不同, 或者它们的行数相同, 但是行的顺序不一致, 则可以用一种没有意义的方式将一组列与另一组列配对。
让我们将上面的示例扩展为一个示例。假设你有两个数据文件, 一个包含汽车制造商和所提供的独特型号的数量, 另一个包含汽车制造商和总销售额的数据文件:
提供的独特型号数量
使 | 当然模型 |
---|---|
本田 | 63 |
宝马 | 10 |
福特汽车 | 26 |
特斯拉 | 4 |
使 | 营业额 |
---|---|
福特汽车 | 119157 |
宝马 | 25908 |
本田 | 188328 |
特斯拉 | 29975 |
在下面的控制台中, 在模型和销售上调用cbind()并打印出结果:
你应该已经得到了这样的东西:
型号与销售
使 | 当然模型 | 使 | 营业额 |
---|---|---|---|
本田 | 63 | 福特汽车 | 119157 |
宝马 | 10 | 宝马 | 25908 |
福特汽车 | 26 | 本田 | 188328 |
特斯拉 | 4 | 特斯拉 | 29975 |
根据本基础课程中讲授的整洁数据原理, 对数据集的每次观察都应在唯一的一行中表示。而且, 如果你仅在一个数据集中的某些行上具有信息, 并且仅想为那些你拥有更多信息的信息添加信息, 那该怎么办?换句话说, 如果你想将一个数据集中的更多列添加到另一个数据集中, 但是这些数据集没有相同数量的观测值, 该怎么办?
主键和外键寻求合并数据集的第一步是寻找数据集的主键。主键是唯一标识数据集中每个观察值的列或列集。在有关汽车制造商, 提供的独特模型的数量以及总销售额的示例中, 数据集的主键是制造商列。
现在, 我们可以执行联接, 这是将数据集合并到单个表中的标准方法。
联接类型联接的类型很多。你可以在dplyr的R的连接数据教程中, 学习如何使用变异联接将一个数据集中的列扩充为另一个列, 如何通过过滤联接将一个数据集与另一个数据集进行筛选, 以及如何使用set操作筛选数据集。以下是一些最常见的内容。
left_join(x, y):从x返回所有行, 从x和y返回所有列。 x中的行与y中的不匹配项将在新列中具有NA值。如果x和y之间存在多个匹配项, 则返回所有匹配项组合。
inner_join(x, y):返回y中有匹配值的x中的所有行, 以及x和y中的所有列。如果x和y之间存在多个匹配项, 则返回所有匹配项组合。
full_join(x, y):返回x和y的所有行和所有列。如果没有匹配的值, 该函数将为缺少的值返回NA。
上面提到的联接是变异联接的示例, 因为它们组合了来自两个数据集的变量。
缺少键假设你有两个数据集。第一个数据集称为大小, 其中包含人物名称及其衬衫尺寸:
>
size
name size
1TomM
2DanXL
3 KeilS
第二个数据集称为颜色, 其中包含人们的姓氏, 衬衫的颜色首选项, 并将一些信息存储在row.names属性中:
>
color
surname color
TomJeon<
NA>
DanSmithDark
Bob McLadden Light
注意这里可能出什么问题吗?当缺少键或重复键时, 两表联接可能会变得很复杂。在此示例中, R的数据帧将重要信息存储在row.names属性中。在这种情况下, 你将无法使用连接功能访问密钥, 因为连接功能只能访问数据框的列。
轻松解决此问题的技巧是使用tibble包中的rownames_to_column()函数。它返回数据集的副本, 其中行名作为列添加到数据中。 rownames_to_column()的第一个参数是你的数据框架对象, 第二个参数是一个字符串, 用于指定要添加的列的名称。
尝试在下面的控制台中浏览。数据集的大小和颜色已预加载到你的工作空间中。
最后的想法【在R中合并数据集】在现实世界中, 数据可能会分散在许多数据集之间, 并跨越许多不同的格式。由于R被设计为使用单个数据表, 因此将数据集处理并将其组合到单个表中是一项必不可少的技能。完成具有R技能跟踪的” 导入和清除数据” , 并学习解析和组合任何格式的数据。学习愉快!
推荐阅读
- 下划线(_)在Python中的作用
- 蒙特卡洛方法简介
- Python中线性回归的要点
- SLAM+???????????????DIY????????????????????????????????????1.miiboo?????????????????????APP??????
- ElasticSearch(Mapping相关)
- Symbol Table Applications
- 源码来袭(callapply手写实现与应用)
- Android环境搭建及Ionic打包(win7)
- Spring系列之——springboot解析resources.application.properties文件