R语言数据合并与连接技巧
最近仍然在陆陆续续自学,真.生命不息学习不止,这次和大家分享一些实用的数据处理技巧,干货满满!
一、数据合并
涉及函数cbind(),rbind(),bind_rows(),bind_cols().
cbind(),rbind()在我前面写的《R语言编程艺术学习笔记》中已经出现过了,很好用,举个栗子:
> data1<-data.frame(
+ nameA=c("Tom","Jack","Max","Jim"),
+ value=c(24,62,47,16)
+ )
> data1nameA value
1 Tom 24
2 Jack 62
3 Max 47
4 Jim 16
> data2<-data.frame(
+ nameB=c("Andy","Sun","Gray","Hennry"),
+ value=c(38,21,55,29)
+ )
> data2nameB value
1 Andy 38
2 Sun 21
3 Gray 55
4 Hennry 29
> cbind(data1,data2)nameA value nameB value
1 Tom 24 Andy 38
2 Jack 62 Sun 21
3 Max 47 Gray 55
4 Jim 16 Hennry 29
> rbind(data1,data2)
Error in match.names(clabs, names(xi)) : 名字同原来已有的名字不相对
这里定义了两个数据框data1和data2,这里定义nameA、nameB和value三个字段,当使用cbind(),实现按列合并,但使用rbind()是报错了,因为nameA、nameB不同,而rbind()函数要求合并的字段名称必须相同。
为了解决这个问题,使用dplyr包中的bind_rows()函数,不要求合并字段的名称必须相同,这个函数会自己做判断,看例子
> library(dplyr)
> dplyr::bind_rows(data1,data2)nameA value nameB
1 Tom 24 <NA>
2 Jack 62 <NA>
3 Max 47 <NA>
4 Jim 16 <NA>
5 <NA> 38 Andy
6 <NA> 21 Sun
7 <NA> 55 Gray
8 <NA> 29 Hennry
dplyr::bind_rows中的::表示引用dplyr包中的函数,这里可以看到nameA、nameB各自有一列,value的值合并了,对于nameA中的值在nameB中没有对应的值,则用NA空值表示。
二、数据连接
涉及函数merge()、dplyr包中的inner_join()、left_join()、right_join()、full_join(),通过例子方便大家理解
> table1<-data.frame(
+ Id=c(1,2,3),
+ sex=c("女","男","男")
+ )
> table2<-data.frame(
+ Id=c(1,2,4),
+ age=c(22,17,33)
+ )
> table1Id sex
1 1 女
2 2 男
3 3 男
> table2Id age
1 1 22
2 2 17
3 4 33
> merge(table1,table2,by="Id",all=FALSE)#内连接Id sex age
1 1 女 22
2 2 男 17
> merge(table1,table2,by="Id",all=TRUE)#外连接Id sex age
1 1 女 22
2 2 男 17
3 3 男 NA
4 4 <NA> 33
> merge(table1,table2,by="Id",all.x=TRUE)#左连接Id sex age
1 1 女 22
2 2 男 17
3 3 男 NA
> merge(table1,table2,by="Id",all.y=TRUE)#右连接Id sex age
1 1 女 22
2 2 男 17
3 4 <NA> 33
merge()函数中by用于指定连接的字段,即通过哪个字段进行连接,通过all=TRUE或者FALSE来决定是连接保留相同ID的字段,还是连接展示ID所有字段,all.x指通过第一个数据框进行连接,即保留第一个数据框的所以ID对应值,去掉不包含的;同理all.y指通过第二个数据框进行连接,即保留第二个数据框的所以ID对应值,去掉不包含的。
#用dplyr包进行连接
inner_join(table1,table2,by="id")
left_join(table1,table2,by="id")
right_join(table1,table2,by="id")
full_join(table1,table2,by="id")
dplyr包中则通过控制函数来连接,这个就更加直观好理解些。
> inner_join(table1,table2,by="Id")Id sex age
1 1 女 22
2 2 男 17
> left_join(table1,table2,by="Id")Id sex age
1 1 女 22
2 2 男 17
3 3 男 NA
> right_join(table1,table2,by="Id")Id sex age
1 1 女 22
2 2 男 17
3 4 <NA> 33
> full_join(table1,table2,by="Id")Id sex age
1 1 女 22
2 2 男 17
3 3 男 NA
4 4 <NA> 33
以上就是今天的小技巧分享内容,希望对你有所帮助,有疑问欢迎提问,下次再见!
R语言数据合并与连接技巧相关推荐
- R语言merge函数全连接dataframe数据(Full (outer) join)、merge函数进行全连接必须将参数all设置为true(all=TRUE)、默认merge函数通过公共列名合并数
R语言merge函数全连接dataframe数据(Full (outer) join).merge函数进行全连接必须将参数all设置为true(all=TRUE).默认merge函数通过公共列名合并数 ...
- R语言merge函数左连接dataframe数据(Left (outer) join in R)、左连接必须将参数all设置(all.x = TRUE)、默认merge函数通过公共列名合并数据集
R语言merge函数左连接dataframe数据(Left (outer) join in R).merge函数进行左连接必须将参数all设置为(all.x = TRUE).默认merge函数通过公共 ...
- R语言数据纵向合并rbind函数实战(以及rbind.fill函数合并两个数据列不同的dataframe)
R语言数据纵向合并rbind函数实战(以及rbind.fill函数合并两个数据列不同的dataframe) 目录
- R语言数据横向合并cbind函数实战
R语言数据横向合并cbind函数实战 目录 R语言数据横向合并cbind函数实战 #基本语法 # cbind横向为dataframe添加新的列
- 求问R语言 分层抽样 合并两个数据框为什么出现了空集
求问R语言 分层抽样 合并两个数据框为什么出现了空集 rbind计算不了 #分层抽样 mydata <- read.csv("dat.csv") #simsample 简单随 ...
- r dataframe 转成向量_快速掌握R语言中类SQL数据库操作技巧
在数据分析中,往往会遇到各种复杂的数据处理操作:分组.排序.过滤.转置.填充.移动.合并.分裂.去重.找重.填充等操作.这时候R语言就是一个很好的选择:R可以高效地.优雅地解决数据处理操作.(本章节为 ...
- R语言数据对象与运算
R语言数据对象与运算 笔记整理 2.1 数据对象及类型 R语言创建和控制的实体被称为对象(object) ls()命令来查看当前系统里的数据对象 R对象的名称必须以一个英文字母打头,并由一串大小写字母 ...
- r语言liftchart_最棒的7种R语言数据可视化
随着数据量不断增加,抛开可视化技术讲故事是不可能的.数据可视化是一门将数字转化为有用知识的艺术. R语言编程提供一套建立可视化和展现数据的内置函数和库,让你学习这门艺术.在可视化的技术实现之前,让我们 ...
- R语言数据预处理——离散化(分箱)
R语言数据预处理--离散化(分箱) 一.项目环境 开发工具:RStudio R:3.5.2 相关包:infotheo,discretization,smbinning,dplyr,sqldf 二.导入 ...
最新文章
- c 获取mysql列数据_转 用C API 操作MySQL数据库
- Service Manger的初始化分析
- Firefox 增强版 仅仅5.7 MB
- 程序员面试题精选100题(61)-数对之差的最大值[算法]
- 安卓JNI使用OpenCV
- 永恒之塔修改服务器,[搬运工]永恒之塔单机版7.8 德国最新服务端
- 【转】SQL Server中行列转换 Pivot UnPivot
- python 线程池_老程序员的经验分享:Python 从业十年是种什么体验?
- linux抓包命令tcptrace,每天学习一个命令:tcpdump 命令行下抓包
- XSLT的处理模型(1)
- 安装软件后,在postinst中执行ldconfig无效?
- c语言线性拉伸0到255,数字图像处理作业题.doc
- MSDN 精简版 1.6
- 海思芯片固件修改工具_魔百盒九联代工M301H海思Hi3798MV310芯片红外蓝牙语音遥控免拆卡刷固件及刷机教程202009版...
- 【干货资料 】简单的交换机光模块故障排查步骤
- 超好用的PC端录屏软件推荐
- 好嗨游戏:战火重燃!2019LPL夏季赛精彩看点全盘点! || 附夏季赛赛程表
- modelsim和vivado仿真不一致——噩梦debug
- 多线程归并排序C语言,快速排序 和 归并排序 c语言实现
- 随机取样已死,蓄水池抽样称王
热门文章
- java感谢地说说_感恩心情说说
- Android ViewPager Fragment 切换刷新数据,解决生命周期只走一次的问题
- 立创eda学习笔记五:如何自己画器件的符号和封装并上传
- c语言实现二分查找法
- 学籍管理软件是计算机的什么应用,学籍管理中计算机信息管理的应用
- 【ArcGIS微课1000例】0063:ArcGIS Earth完美代替Google Earth(附安装包下载)
- Mni2440 linux PWM 驱动代码修改支持 频率,占空比修改--XiaoLin.Peng
- js 图片保存至手机相册
- 我的Java学习之路(七)-- 模拟考试系统
- 不断提升认知,从而达到交易的最高级别——稳定盈利(一)