R 中几个常见的合并数据集方法

简介: R 中几个常见的合并数据集方法

Merge with dplyr()


Dplyr提供了一种很好的、方便的组合数据集的方法。


Left_join()


right_join()


inner_join()


full_join()


首先,我们建立两个数据集。表1包含两个变量,ID和y,而表2包含了ID和z。在每种情况下,我们都需要有一个关键变量。在本例中,ID是关键变量。该函数将在两个表中寻找相同的值,并将返回值添加到表1的右侧。

library(dplyr)
df_primary <- tribble(
  ~ID, ~y,
   "A", 5,
   "B", 5,
   "C", 8,
   "D", 0,
  "F", 9)
df_secondary <- tribble(
  ~ID, ~z,
   "A", 30,
   "B", 21,
   "C", 22,
   "D", 25,
   "E", 29)
> df_primary
# A tibble: 5 x 2
  ID        y
  <chr> <dbl>
1 A         5
2 B         5
3 C         8
4 D         0
5 F         9
> df_secondary
# A tibble: 5 x 2
  ID        z
  <chr> <dbl>
1 A        30
2 B        21
3 C        22
4 D        25
5 E        29
left_join()

合并两个数据集的最常见方法是使用left_join()函数。我们可以从下面的图片中看到,关键变量完美地匹配了两个数据集中的行A、B、C和D。但是,剩下E和F。我们如何看待这两个观察结果?使用left_join(),我们将在原始表中保留所有变量,而不考虑目标表中没有匹配到的变量。在我们的示例中,变量E不存在于表1中。因此,该行将被删除。变量F来自原始表,因此它将保留在left_join()之后,并在列z显示为NA。如下图所示:

image.png


210510_1

left_join(df_primary, df_secondary, by ='ID')
> left_join(df_primary, df_secondary, by ='ID')
# A tibble: 5 x 3
  ID      y   z
  <chr> <dbl> <dbl>
1 A         5    30
2 B         5    21
3 C         8    22
4 D         0    25
5 F         9    NA

right_join()

right_join()函数的工作方式与left_join()完全相同。唯一的区别是被删除的行。right_join()将目标数据集中的变量E存在于新表中,并为列y取值NA。

image.png


210510_2

right_join(df_primary, df_secondary, by = 'ID')
> right_join(df_primary, df_secondary, by = 'ID')
# A tibble: 5 x 3
  ID      y   z
  <chr> <dbl> <dbl>
1 A         5    30
2 B         5    21
3 C         8    22
4 D         0    25
5 E        NA    29

inner_join()


当两个数据集不匹配时,我们可以考虑只返回两个数据集中存在的行。inner_join()可以排除不匹配的行。

image.png


210510_3

inner_join(df_primary, df_secondary, by ='ID')
> inner_join(df_primary, df_secondary, by ='ID')
# A tibble: 4 x 3
  ID      y   z
  <chr> <dbl> <dbl>
1 A         5    30
2 B         5    21
3 C         8    22
4 D         0    25

full_join()


full_join()函数保留所有的观察结果,并用NA替换缺失的值。

image.png


210510_4

full_join(df_primary, df_secondary, by = 'ID')
> full_join(df_primary, df_secondary, by = 'ID')
# A tibble: 6 x 3
  ID      y   z.y
  <chr> <dbl> <dbl>
1 A         5    30
2 B         5    21
3 C         8    22
4 D         0    25
5 F         9    NA
6 E        NA    29

Multiple keys pairs


如果有多个关键变量时,则需一起使用。

image.png


210510_5

df_primary <- tribble(
  ~ID, ~year, ~items,
  "A", 2015,3,
  "A", 2016,7,
  "A", 2017,6,
  "B", 2015,4,
  "B", 2016,8,
  "B", 2017,7,
  "C", 2015,4,
  "C", 2016,6,
  "C", 2017,6)
df_secondary <- tribble(
  ~ID, ~year, ~prices,
  "A", 2015,9,
  "A", 2016,8,
  "A", 2017,12,
  "B", 2015,13,
  "B", 2016,14,
  "B", 2017,6,
  "C", 2015,15,
  "C", 2016,15,
  "C", 2017,13)
left_join(df_primary, df_secondary, by = c('ID', 'year'))
> left_join(df_primary, df_secondary, by = c('ID', 'year'))
# A tibble: 9 x 4
  ID     year items prices
  <chr> <dbl> <dbl>  <dbl>
1 A      2015     3      9
2 A      2016     7      8
3 A      2017     6     12
4 B      2015     4     13
5 B      2016     8     14
6 B      2017     7      6
7 C      2015     4     15
8 C      2016     6     15
9 C      2017     6     13
相关文章
|
1月前
单细胞分析|映射和注释查询数据集
单细胞分析|映射和注释查询数据集
40 3
|
1月前
|
数据处理 开发工具 git
coco2017数据集转换为yolo格式(记录过程)
最近做一个yolov5的落地应用项目,用的anylabeling打标,需要将coco2017的数据集转为yolo格式,故写下记录过程!
|
1月前
|
存储 数据挖掘 机器人
使用LOTR合并检索提高RAG性能
RAG结合了两个关键元素:检索和生成。它首先使用语义搜索等高级技术来浏览大量数据,包括文本、图像、音频和视频。RAG的本质在于它能够检索相关信息,然后作为下一阶段的基础。生成组件利用大型语言模型的能力,解释这些数据块,制作连贯的、类似人类的响应。与传统的生成模型相比,这个过程确保RAG系统可以提供更细致和准确的输出。
158 2
|
SQL 测试技术
|
8月前
|
项目管理 vr&ar 图形学
怎么将两个模型合并成一个?
当你需要将多个3D模型组合为一个整体,简化管理、提高渲染性能或实现特定的效果时,合并模型是一个有用的工具和技术。
215 1
|
存储 编解码 数据安全/隐私保护
ISPRS Vaihingen 数据集解析
ISPRS Vaihingen 数据集解析
851 0
ISPRS Vaihingen 数据集解析
|
机器学习/深度学习 固态存储 数据处理
【目标检测之数据集预处理】继承Dataset定义自己的数据集【附代码】(上)
在深度学习训练中,除了设计有效的卷积神经网络框架外,更重要的是数据的处理。在训练之前需要对训练数据进行预处理。比如在目标检测网络训练中,首先需要划分训练集和测试集,然后对标签、边界框等进行处理后才能送入网络进行训练,本文章以VOC数据集格式为例,对数据集进行预处理后送入目标检测网络进行训练。【附代码】
289 0
【目标检测之数据集预处理】继承Dataset定义自己的数据集【附代码】(上)
|
机器学习/深度学习 数据处理 计算机视觉
【目标检测之数据集预处理】继承Dataset定义自己的数据集【附代码】(下)
在深度学习训练中,除了设计有效的卷积神经网络框架外,更重要的是数据的处理。在训练之前需要对训练数据进行预处理。比如在目标检测网络训练中,首先需要划分训练集和测试集,然后对标签、边界框等进行处理后才能送入网络进行训练,本文章以VOC数据集格式为例,对数据集进行预处理后送入目标检测网络进行训练。【附代码】
175 0
|
机器学习/深度学习 索引 Python
ML之FE:特征工程中常用的五大数据集划分方法(特殊类型数据分割,如时间序列数据分割法)讲解及其代码
ML之FE:特征工程中常用的五大数据集划分方法(特殊类型数据分割,如时间序列数据分割法)讲解及其代码
ML之FE:基于单个csv文件数据集(自动切分为两个dataframe表)利用featuretools工具实现自动特征生成/特征衍生
ML之FE:基于单个csv文件数据集(自动切分为两个dataframe表)利用featuretools工具实现自动特征生成/特征衍生