R语言-数据合并

匿名 (未验证) 提交于 2019-12-03 00:21:02
1、数据集合并简介


2、数据集准备
##创建学生信息表 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)

3、基本语法
3.1 merge()函数

参数解释:

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

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

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

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

sort:是否需要排序

3.2 data.table中的方法

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

setkey(x, column_name)

setkey(y, column_name)

然后基本语法:

3.3 dplyr中的方法

基本语法

full_join(x, y, by ...)

anti_join(x, y, by ...)

参数解释:

x、y为tbl_df类似数据

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


4、内连接
##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") 

5、左连接

##merge函数实现 merge(student, class, by = "name", all.x = T)  ###data.table中实现,哪个是主表,写在[]里面 class.dt[student.dt]  ###dplyr中实现 left_join(student.df, class.df, by = "name")

6、右连接
##merge函数实现 merge(student, class, by = "name", all.y = T)  ##data.table实现,哪个是主表,写在[]内 student.dt[class.dt]  ##dplyr实现 right_join(student.df, class.df, by = "name")

7、其他连接
全连接
##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")




文章来源: R语言-数据合并
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!