【R语言】数据合并(连接)-merge、data.table、dplry

部署运行你感兴趣的模型镜像

0. 前言

    实际操作中,我们经常需要引入其他表中的列,即将其他表中列加入到表中,需要把两个或者更多的表合并成一个,R语言中有几种常用的几个合并函数。这里主要介绍merge()函数、data.table包以及dplyr包中的合并数据方法。

 

1. 数据集准备

##创建学生信息表
student <- data.frame("name" = c("张三", "李四", "王五", "马六"),
                      "score" = c(65, 70, 61, 98))

##创建学生年级信息表
class <- data.frame(name = c("张三", "王五", "马六", "小明"),
                    "grade" = c("三年级", "二年级", "四年级", "四年级"))

##转换数据类型
library(data.table)
student.dt <- data.table(student)
class.dt <- data.table(class)

##转换数据类型
library(dplyr)
student.df <- tbl_df(student)
class.df <- tbl_df(class)

 

2. 基本语法

2.1 merge()函数

merge(x,  y,  by,  by.x,  by.y, all,  all.x,  all.y...)

参数解释:

x,y:需要合并的数据集

by:用于连接两个数据集的列,当两个数据集公共列名相同,可以写成by = "公共列名"

by.x、by.y:用于指定依据哪个列合并,常用于当两个数据集公共列名不一样的时候;

all、all.x、all.y:指定x和y的行是否应该全部输出

sort:是否需要排序

2.2. data.table中的方法

首先创建公共键,可以理解为两个数据表连接的列。

setkey(x, column_name)

setkey(y, column_name)

然后基本语法:

x[y]  ##注意x和y数据类型为data.table

2.3 dplyr中的方法

基本语法

inner_join(x, y, by  ...)

left_join(x, y, by  ...)

right_join(x, y, by  ...)

full_join(x, y, by ...)

anti_join(x, y, by ...)

参数解释:

x、y为tbl_df类似数据

by:公共列,当公共列名相同的时候,直接使用by = "公共列名";当公共列名不同的时候,使用by = c("a" = "b"),可以理解x.a = y.b。

 

3. 内连接

##merge函数实现
merge(student, class, by = "name")

##通过data.table实现
###创建键
setkey(student.dt, name)
setkey(class.dt, name)
###内连接实现,nomatch = 0限制是内连接
student.dt[class.dt,nomatch = 0]

##通过dplyr实现,与merge函数语句基本相同
inner_join(student.df, class.df, by = "name")

 

4. 左连接

 

##merge函数实现
merge(student, class, by = "name", all.x = T)

###data.table中实现,哪个是主表,写在[]里面
class.dt[student.dt]

###dplyr中实现
left_join(student.df, class.df, by = "name")

 

5. 右连接

##merge函数实现
merge(student, class, by = "name", all.y = T)

##data.table实现,哪个是主表,写在[]内
student.dt[class.dt]

##dplyr实现
right_join(student.df, class.df, by = "name")

 

6. 其他连接

全连接

##merge函数实现
merge(student, class, by = "name",all = T)

##dplyr中实现
full_join(student.df, class.df, by = "name")

“差”连接:只存在一个表,另一个表中都不匹配的数据

##只存在student_df,class_df中不存在的数据
anti_join(student.df, class.df, by = "name")

 

 

 

 

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.9

TensorFlow-v2.9

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值