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
相关文章
|
4月前
|
数据采集 存储 人工智能
cdga|数据治理:应对核心业务数据质量参差不齐的挑战与策略
数据治理是指通过制定并实施一系列政策、流程和技术手段,确保数据的可用性、完整性、准确性和安全性,以支持企业的决策和业务运营。对于核心业务数据质量参差不齐的问题,数据治理的重要性不言而喻
|
8月前
|
存储 缓存 Linux
【实战指南】嵌入式RPC框架设计实践:六大核心类构建高效RPC框架
在先前的文章基础上,本文讨论如何通过分层封装提升一个针对嵌入式Linux的RPC框架的易用性。设计包括自动服务注册、高性能通信、泛型序列化和简洁API。框架分为6个关键类:BindingHub、SharedRingBuffer、Parcel、Binder、IBinder和BindInterface。BindingHub负责服务注册,SharedRingBuffer实现高效数据传输,Parcel处理序列化,而Binder和IBinder分别用于服务端和客户端交互。BindInterface提供简单的初始化接口,简化应用集成。测试案例展示了客户端和服务端的交互,验证了RPC功能的有效性。
509 12
|
9月前
|
数据采集 存储 分布式计算
数据爆炸时代的挑战与机遇:大规模数据处理的技术突破
在当今数字化时代,数据量呈现爆炸式增长,给传统数据处理带来了巨大挑战。本文将探讨大规模数据处理所面临的问题,并介绍一些技术突破,如分布式计算、云计算和人工智能,以应对这一挑战。通过有效处理和分析海量数据,我们将迎来更多的机遇和创新。
|
8月前
|
Java
Flowable流程的挂起与激活详解
Flowable流程的挂起与激活详解
362 1
|
Java Android开发 iOS开发
Jetpack Compose如何配合ProGuard压缩混淆?其实还得自己配任务
尽管Jetpack Compose早在去年十月就已经宣布支持Proguard了,但似乎这大半年没有多少人真正试过怎么用Proguard,以至于这个功能只是半成品,但这二者的结合其实是一个不可缺少的需求
556 0
|
SQL 缓存 搜索推荐
Gorm学习(三)基础:迁移(数据库建表以及字段设置)
在项目开发中,我们可能会随时调整声明的模型,比如添加字段和索引,使用 GORM 的自动迁移功能,可以始终让我们的数据库表结构保持最新。
1304 0
Gorm学习(三)基础:迁移(数据库建表以及字段设置)
|
机器学习/深度学习 人工智能 分布式计算
阿里云机器学习 PAI 年度发布:持续锻造云原生的 AI 工程平台
刚刚结束的 2022 云栖大会上,阿里云机器学习平台 PAI 发布了在开发者服务、企业级能力、工程性能优化三个方向的一系列新特性和功能。从支撑达摩院上云,到服务金融、汽车、互联网、制造等多个行业的创新实践,机器学习 PAI 不断夯实云原生的 AI 工程平台能力。
阿里云机器学习 PAI 年度发布:持续锻造云原生的 AI 工程平台
|
缓存 JavaScript 前端开发
|
SQL 应用服务中间件 nginx
nginx禁止外网访问登录页面,SQL 注入、XSS 攻击配置
nginx禁止外网访问登录页面,SQL 注入、XSS 攻击配置
750 0
|
XML 前端开发 Java
基于SpringBoot框架的管理系统【完整项目源码】
基于SpringBoot框架的管理系统【完整项目源码】
基于SpringBoot框架的管理系统【完整项目源码】

热门文章

最新文章