R语言数据集合并、数据增减、不等长合并

摘要:
rbind()按照横向的方向,或者说按行的方式将矩阵连接到一起rbind/cbind对数据合并的要求比较严格:合并的变量名必须一致;数据等长;指标顺序必须一致。相比来说,其他一些方法要好一些,有dplyr,sqldf中的union5、sqldf包利用SQL语句来写,进行数据合并,适合数据库熟悉的人,可参考:R语言︱数据库SQL-R连接与SQL语句执行二、数据增减[plain]viewplaincopyprint?

数据选取与简单操作:

which返回一个向量中指定元素的索引
which.max返回最大元素的索引
which.min返回最小元素的索引
sample随机在向量中抽取元素
subset根据条件选取元素
sort升序排列元素
rev反转所有元素
order获取排序后的索引
table返回频数表
cut将数据分割为几部分
split按照指定条件分割数据
rbind行合并
cbind列合并
merge按照指定列合并矩阵或者数据框
一、数据合并

1、merge()函数

最常用merge()函数,但是这个函数使用时候这两种情况需要注意:

1、merge(a,b),纯粹地把两个数据集合在一起,没有沟通a、b数据集的by,这样出现的数据很多,相当于a*b条数据;

2、merge函数是匹配到a,b数据集的并,都有的才匹配出来,如果a、b数据集ID不同,要用all=T(下面有all用法的代码)。

  1. #横向合并
  2. ID<-c(1,2,3,4)
  3. name<-c("Jim","Tony","Lisa","Tom")
  4. score<-c(89,22,78,78)
  5. student1<-data.frame(ID,name)
  6. student2<-data.frame(ID,score)
  7. total_student<-merge(student1,student2,by="ID")#或者rbind()
  8. total_student
  1. #纵向合并
  2. ID<-c(1,2,3)
  3. name<-c("Jame","Kevin","Sunny")
  4. student1<-data.frame(ID,name)
  5. ID<-c(4,5,6)
  6. name<-c("Sun","Frame","Eric")
  7. student2<-data.frame(ID,name)
  8. total<-cbind(student1,student2)
  9. total

merge的all用法

  1. >id=c("1","2","3")
  2. >M=c("7","2","3")
  3. >ink2=data.frame(id,M)
  4. >
  5. >merge(ink1,ink2,by="id",all=T)#所有数据列都放进来,空缺的补值为NA
  6. idRM
  7. 1197
  8. 2272
  9. 349<NA>
  10. 43<NA>3
  11. >merge(ink1,ink2,by="id",all=F)#默认,只取两者的共有的部分
  12. idRM
  13. 1197
  14. 2272

其中,all=T代表全连接,all.x=T代表左联结;all.y=T代表右连接

2、dplyr包

dplyr包的数据合并,

一般用left_join(x,y,by="name") 以x为主,y中匹配到的都放进来, 但,y中没有的则不放过来。

需要这个x数据集是全集,比较大。

R语言数据集合并、数据增减、不等长合并第7张

R语言数据集合并、数据增减、不等长合并第8张

3、paste函数

生成一长串字符向量。

  1. paste(c("X","Y"),1:10,sep="")#"X”,"Y"是长度为2的字符向量,1:10长度为10的向量。命令是让这两个向量粘合在一起生成新的字符串向量,粘合后的新字符之间没有间隔。

  1. #—————————paste中seq与collapse区别————————————————————
  2. a=c(1,2,3,4,5)
  3. names(a)=c('m','n','o','p','q')
  4. #主要是区分使用sep和collapse
  5. b=paste(a,names(a),sep="/")#不同向量合并在一起,但是还是各自向量
  6. c=paste(b,collapse=",")#不同向量合并在一起,但是变成一个向量
  7. mode(b)#变量类型
  8. mode(c)

4、cbind和rbind函数

cbind()和rbind(),cbind()按照纵向方向,或者说按列的方式将矩阵连接到一起。

rbind()按照横向的方向,或者说按行的方式将矩阵连接到一起

rbind/cbind对数据合并的要求比较严格:合并的变量名必须一致;数据等长;指标顺序必须一致。相比来说,其他一些方法要好一些,有dplyr,sqldf中的union

5、sqldf包

利用SQL语句来写,进行数据合并,适合数据库熟悉的人,可参考:

R语言︱ 数据库SQL-R连接与SQL语句执行(RODBC、sqldf包)二、数据增减
  1. x=x[,-1]#这个就代表,删除了x数据集中第一列数据

或用dplyr包中的mutate函数

  1. a=mutate(Hdma_dat,dou=2*survived,dou4=4*survived)
  2. Hdma_dat$dou=a$dou
  3. Hdma_dat$dou4=a$dou4#两个新序列,加入到Hdma数据集汇总

筛选变量服从某值的子集

  1. subset(airquality,Temp>80,select=c(Ozone,Temp))
  2. subset(airquality,Day==1,select=-Temp)
  3. subset(airquality,select=Ozone:Wind)
三、数据纵横加总

R使用rowSums函数对行求和,使用colSums函数对列求和。

四、不等长合并

1、plyr包

rbind.fill函数可以很好将数据进行合并,并且补齐没有匹配到的缺失值为NA。

  1. #————————————————————————————不等长合并
  2. #如何解决合并时数据不等长问题——两种方法:do.call函数以及rbind.fill函数(plyr包)
  3. #rbind.fill函数只能合并数据框格式
  4. #do.call函数在数据框中执行函数(函数,数据列)
  5. library("plyr")#加载获取rbind.fill函数
  6. #第一种方法
  7. list1<-list()
  8. list1[[1]]=data.frame(t(data.frame(Job_Pwordseg.ct[1])))
  9. list1[[2]]=data.frame(t(data.frame(Job_Pwordseg.ct[2])))
  10. do.call(rbind.fill,list1)
  11. #第二种方法
  12. u=rbind.fill(data.frame(t(data.frame(Job_Pwordseg.ct[1]))),data.frame(t(data.frame(Job_Pwordseg.ct[2]))))

核心函数是plyr包中的rbind.fill函数(合并的数据,必须是data.frame),do.call可以用来批量执行。(do.call用法

关于do.call其他用法(R语言函数do.call()使用 )

有一个list,想把里面的所有元素相加求和。发现了两个很有意思的函数

list <- list(matrix(1:25, ncol = 5), matrix(4:28, ncol = 5), matrix(21:45, ncol=5))

list.sum<-do.call(sum,list)

list.sum<-do.call(cbind,list)

do.call()是告诉list一个函数,然后list里的所有元素来执行这个函数。

2、dplyr包

dplyr::bind_rows()

  1. mpgcylhpdratwtqsecvsamgearcarbdisp
  2. (dbl)(dbl)(dbl)(dbl)(dbl)(dbl)(dbl)(dbl)(dbl)(dbl)(dbl)
  3. 121.061103.902.62016.460144NA
  4. 221.061103.902.87517.020144NA
  5. 322.84933.852.32018.611141NA
  6. 421.461103.083.21519.441031NA
  7. 517.861233.923.44018.901044167.6
  8. 616.481803.074.07017.400033275.8
  9. 717.381803.073.73017.600033275.8
  10. 815.281803.073.78018.000033275.8

效果是,不匹配到的放在最后,且等于NA NA NA NA

免责声明:文章转载自《R语言数据集合并、数据增减、不等长合并》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇web浏览器渲染流程,window.onload() 与 $(window).load()、$(document).ready() 与 $(function(){}) 的区别和关联eNSP——利用三层交换机实现VLAN间路由下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

机器学习与R语言

此书网上有英文电子版:Machine Learning with R - Second Edition [eBook].pdf(附带源码) 评价本书:入门级的好书,介绍了多种机器学习方法,全部用R相关的包实现,案例十分详实,理论与实例结合。 目录 第一章 机器学习简介 第二章 数据的管理和理解 第三章 懒惰学习--使用近邻分类 第四章 概率学习--朴素贝...

R语言:变量名称和字符串的转换

R语言:变量名称和字符串的转换 2014-06-23 14:45:27         在R语言中,经常会遇到变量名称和字符串相互转换的问题。比如说,进行1000次循环运算,并将运算结果存储在1000个变量中,如x_1, x_2, ... , x_1000。这时候可以使用assign()函数,示例如下:> a错误: 找不到对象'a'> as...

R语言-混合型数据聚类

利用聚类分析,我们可以很容易地看清数据集中样本的分布情况。以往介绍聚类分析的文章中通常只介绍如何处理连续型变量,这些文字并没有过多地介绍如何处理混合型数据(如同时包含连续型变量、名义型变量和顺序型变量的数据)。本文将利用 Gower 距离、PAM(partitioning around medoids)算法和轮廓系数来介绍如何对混合型数据做聚类分析。 --...

R语言-自动批处理

R语言-自动批处理文件   在处理数据的过程中,可以制作一个自动批处理文件,让它具有智能的效果,自动化完成复杂的数据处理过程,提高工作效率,解放生产力,从而可以投入更多的精力到数据分析和数据挖掘中,发现数据中的"金子",体现数据的真正价值!!! 方法1:   R语言中 C:Program FilesRR-3.2.0inx64 中有个 Rscript.e...

R语言中判断是否是整数。以及读写excel

今天接手一个重复性工作, 需要手工把产品运营们在excel里写的活动规则, 插入数据库表中。为了减少出错, 提高效率。 再加上最近刚刚学R语言, 就用R练练手, 自动生成mysql的sql语句。 一次性提交。 刚才就是判断一个值是否是整数折腾了一小会儿。后来发现R判断这个很简单。 就是as.integer(money) != as.numeric(mone...

R语言数据分析系列六

R语言数据分析系列六 ——by comaple.zhang 上一节讲了R语言作图,本节来讲讲当你拿到一个数据集的时候怎样下手分析,数据分析的第一步。探索性数据分析。 统计量,即统计学里面关注的数据集的几个指标。经常使用的例如以下:最小值,最大值,四分位数,均值,中位数,众数,方差,标准差。极差,偏度,峰度 先来解释一下各个量得含义,浅显就不说了,这里...