最近仍然在陆陆续续自学,真.生命不息学习不止,这次和大家分享一些实用的数据处理技巧,干货满满!

一、数据合并

涉及函数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语言数据合并与连接技巧相关推荐

  1. R语言merge函数全连接dataframe数据(Full (outer) join)、merge函数进行全连接必须将参数all设置为true(all=TRUE)、默认merge函数通过公共列名合并数

    R语言merge函数全连接dataframe数据(Full (outer) join).merge函数进行全连接必须将参数all设置为true(all=TRUE).默认merge函数通过公共列名合并数 ...

  2. 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函数通过公共 ...

  3. R语言数据纵向合并rbind函数实战(以及rbind.fill函数合并两个数据列不同的dataframe)

    R语言数据纵向合并rbind函数实战(以及rbind.fill函数合并两个数据列不同的dataframe) 目录

  4. R语言数据横向合并cbind函数实战

    R语言数据横向合并cbind函数实战 目录 R语言数据横向合并cbind函数实战 #基本语法 # cbind横向为dataframe添加新的列

  5. 求问R语言 分层抽样 合并两个数据框为什么出现了空集

    求问R语言 分层抽样 合并两个数据框为什么出现了空集 rbind计算不了 #分层抽样 mydata <- read.csv("dat.csv") #simsample 简单随 ...

  6. r dataframe 转成向量_快速掌握R语言中类SQL数据库操作技巧

    在数据分析中,往往会遇到各种复杂的数据处理操作:分组.排序.过滤.转置.填充.移动.合并.分裂.去重.找重.填充等操作.这时候R语言就是一个很好的选择:R可以高效地.优雅地解决数据处理操作.(本章节为 ...

  7. R语言数据对象与运算

    R语言数据对象与运算 笔记整理 2.1 数据对象及类型 R语言创建和控制的实体被称为对象(object) ls()命令来查看当前系统里的数据对象 R对象的名称必须以一个英文字母打头,并由一串大小写字母 ...

  8. r语言liftchart_最棒的7种R语言数据可视化

    随着数据量不断增加,抛开可视化技术讲故事是不可能的.数据可视化是一门将数字转化为有用知识的艺术. R语言编程提供一套建立可视化和展现数据的内置函数和库,让你学习这门艺术.在可视化的技术实现之前,让我们 ...

  9. R语言数据预处理——离散化(分箱)

    R语言数据预处理--离散化(分箱) 一.项目环境 开发工具:RStudio R:3.5.2 相关包:infotheo,discretization,smbinning,dplyr,sqldf 二.导入 ...

最新文章

  1. c 获取mysql列数据_转 用C API 操作MySQL数据库
  2. Service Manger的初始化分析
  3. Firefox 增强版 仅仅5.7 MB
  4. 程序员面试题精选100题(61)-数对之差的最大值[算法]
  5. 安卓JNI使用OpenCV
  6. 永恒之塔修改服务器,[搬运工]永恒之塔单机版7.8 德国最新服务端
  7. 【转】SQL Server中行列转换 Pivot UnPivot
  8. python 线程池_老程序员的经验分享:Python 从业十年是种什么体验?
  9. linux抓包命令tcptrace,每天学习一个命令:tcpdump 命令行下抓包
  10. XSLT的处理模型(1)
  11. 安装软件后,在postinst中执行ldconfig无效?
  12. c语言线性拉伸0到255,数字图像处理作业题.doc
  13. MSDN 精简版 1.6
  14. 海思芯片固件修改工具_魔百盒九联代工M301H海思Hi3798MV310芯片红外蓝牙语音遥控免拆卡刷固件及刷机教程202009版...
  15. 【干货资料 】简单的交换机光模块故障排查步骤
  16. 超好用的PC端录屏软件推荐
  17. 好嗨游戏:战火重燃!2019LPL夏季赛精彩看点全盘点! || 附夏季赛赛程表
  18. modelsim和vivado仿真不一致——噩梦debug
  19. 多线程归并排序C语言,快速排序 和 归并排序  c语言实现
  20. 随机取样已死,蓄水池抽样称王

热门文章

  1. java感谢地说说_感恩心情说说
  2. Android ViewPager Fragment 切换刷新数据,解决生命周期只走一次的问题
  3. 立创eda学习笔记五:如何自己画器件的符号和封装并上传
  4. c语言实现二分查找法
  5. 学籍管理软件是计算机的什么应用,学籍管理中计算机信息管理的应用
  6. 【ArcGIS微课1000例】0063:ArcGIS Earth完美代替Google Earth(附安装包下载)
  7. Mni2440 linux PWM 驱动代码修改支持 频率,占空比修改--XiaoLin.Peng
  8. js 图片保存至手机相册
  9. 我的Java学习之路(七)-- 模拟考试系统
  10. 不断提升认知,从而达到交易的最高级别——稳定盈利(一)