R语言数据分析与挖掘-数据基本管理_第1页
R语言数据分析与挖掘-数据基本管理_第2页
R语言数据分析与挖掘-数据基本管理_第3页
R语言数据分析与挖掘-数据基本管理_第4页
R语言数据分析与挖掘-数据基本管理_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据去重01102数据筛选03数据合并04数据排序数据关联0106融合重铸07数据聚合08数据转换05数据分组PAGE2数据基本管理常用的数据基本管理手段包括:数据去重、数据排序、数据筛洗、数据合并、数据聚合等操作2数据去重301PAGE4数据去重我们可以通过base扩展包的unique()函数或者dplyr扩展包的distinct()函数轻松实现。其中unique()函数能对矩阵、数组或数据框进行操作,移除重复元素或记录。在做数据分析及建模时,遇到最多的数据对象当属数据框。以下代码实现分别利用unique()和distinct()函数对数据框的重复记录进行删除。4set.seed(1234)df<-data.frame(x1=sample(1:3,8,replace=T),x2=sample(letters[1:3],8,replace=T))dfx1x212c22b31b43b51c61b72b82b(a<-unique(df))x1x212c22b31b43b51cif(!require(dplyr))install.packages("dplyr")#加载dplyr包,如不存在就进行在线安装(b<-distinct(df))x1x212c22b31b43b6 1cidentical(a,b)#判断两个函数的结果是否一致[1]TRUE数据排序502PAGE6数据排序有时候,需要对数据进行排序,以查看更多有用信息。R语言中,可使用基础包的sort()和order()函数实现。其中sort()函数返回的是排序后的数据结果,order()函数返回的是排序后的元素所在位置。两者默认都是按照升序(由小到大)排序,可以通过将参数decreasing设置为TRUE,改成降序排序。以下代码实现先创建一个向量v,再通过sort()和order()函数对向量v进行排序。6>set.seed(1234)>v<-sample(1:10,10)>v[1]10654182793>sort(v)[1]12345678910>order(v)[1]57104328691数据筛选703PAGE8数据筛选有时候,我们更关注数据集中的部分数据,可以利用R语言强大的索引特性来定位符合筛选条件的元素。比如我们查看鸢尾花数据集iris前6行、第1,3,5列的数据子集,以下代码通过指定下标集的方式实现。也可以根据表达式得到符合条件的数据子集。比如想提取变量Sepal.Length值大于5.5且变量因子水平为setosa的数据子集,可通过以下代码实现。8>iris[1:6,c(1,3,5)]

Sepal.Length

Petal.LengthSpecies15.11.4setosa24.91.4setosa34.71.3setosa44.61.5setosa55.01.4setosa65.41.7setosa>iris[iris$Sepal.Length>5.5&iris$Species=='setosa',]Sepal.LengthSepal.WidthPetal.LengthPetal.WidthSpecies155.84.01.20.2setosa165.74.41.50.4setosa195.73.81.70.3setosaPAGE9数据筛选-subset()函数基础包的subset()函数非常适合做数据筛选的工作。subset()函数主要参数有两个:参数subset是逻辑表达式,用来过滤符合条件的行或元素;参数select是用来选择需要保留的列。下面以汽车数据集mtcars为例,讲解subset()函数的用法。9>subset(mtcars,cyl==4,select=mpg:hp)mpgcyldisphpDatsun71022.84108.093Merc240D24.44146.762Merc23022.84140.895Fiat12832.4478.766HondaCivic30.4475.752ToyotaCorolla33.9471.165ToyotaCorona21.54120.197FiatX1-927.3479.066Porsche914-226.04120.391LotusEuropa30.4495.1113Volvo142E21.44121.0109还可以给参数subset传递正则表达式,返回符合条件的模糊匹配结果。以下代码实现提取汽车名称包含“Merc”或“Fiat”文字的记录。现在想筛选出气缸数(cyl)为4,前4列的数据子集,可以通过以下代码实现。PAGE10数据筛选-filter()函数dplyr扩展包的filter()函数也能对数据进行筛选操作。以下代码通过两种方式实现提取变量cyl值为4的数据子集。10数据合并1104PAGE12数据合并-rbind()和cbind()函数基础包的行合并rbind()和列合并cbind()函数在第二章已经接触过。这两个函数很简单,大家记住一点:rbind()函数使用时要确保各数据对象具有相同的列数,cbind()使用时要确保各数据对象具有相同的行数。12PAGE13数据合并-bind_rows()和bind_cols()函数在dplyr扩展包中有bind_rows()和bind_cols()函数实现简单的行列合并功能,需要注意的一点是,这两个函数只能操作数据框。继续以r1、r2为例进行说明,在使用函数前,需要将数据对象转换成数据框。13数据关联1405PAGE15数据关联-merge()函数通过cbind()函数可以实现简单的数据合并,如果想实现更复杂的数据匹配,就需要借助merge()函数了。R语言中的merge()函数类似于Excel中的Vlookup()函数,可以实现对两个数据表进行匹配和拼接功能。merge()函数的表达形式如下:15merge(x,y,by=intersect(names(x),names(y)),by.x=by,by.y=by,all=FALSE,all.x=all,all.y=all,sort=TRUE,suffixes=c(".x",".y"),no.dups=TRUE,incomparables=NULL,...)PAGE16数据关联-merge()函数4种拼接模式merge()函数有4种匹配拼接模式,分别为inner,left,right和outer模式。其中inner为默认的匹配模式,代表内连接;all=T代表全连接;all.x=T代表左连接;all.y=T代表右连接。16PAGE17数据关联-merge()函数一次只能拼接两张表merge()函数一次只能匹配两个表,如果想实现两张表以上的关联,则需要多次运用merge()函数实现。比如现在多了一个数据框math_score,记录了学生名字和数学成绩。以下代码实现将学生性别、英语成绩、数学成绩关联到一个宽表中17PAGE18数据关联-dplyr包dplyr扩展包的left_join()、right_join()、inner_join()、full_join()函数也能轻松实现左连接、右连接、内连接和全连接。以下代码利用full_join()函数结合管道符号%>%实现df_join2的效果。18>student%>%+full_join(english_score,by='name')%>%+full_join(math_score,by=c('name'="stu_name"),suffix=c('.english','.math'))数据转换1906PAGE20数据转换-transform()函数让我们学习如何利用transform()函数进行数据转换。当重新赋值的标签在数据集变量名中未出现时,则会在数据集后面新增列。以下代码实现将变量vs、am值进行转换后分别赋值给变量Engine、Transmission,此时会在mtcars中新增两列。20PAGE21数据转换-dplyr包dplyr扩展包的mutate()和transmute()函数都可对数据进行变换,两者的区别在于mutate()函数返回数据集所有变量的结果,transmute()函数只返回转换的变量结果。当将变量赋值为NULL时,mutate()函数也能移除数据中已经此变量。下面代码实现利用mutate()函数移除mtcars中的变量Engine和Transmission。21>library(dplyr)>mtcars<-mtcars%>%mutate(+Engine=NULL,+Transmission=NULL+)>colnames(mtcars)[1]"mpg""cyl""disp""hp""drat""wt""qsec""vs""am""gear""carb"融合重铸2207PAGE23长数据、宽数据开始进行数据重铸前,有必要先了解什么是长数据、宽数据?长数据一般是指数据集中的变量没有做明确的细分,即存在变量元素重复情况(比如所离散变量),表格整体的形状为长方形,即行数多列数少。宽数据是指数据集对所有变量进行了明确细分,各变量的值不存在重复循环的情况也无法归类。数据总体的表现为列数多行数少。R语言中的reshape扩展包、reshape2扩展包、tidyr扩展包均有函数实现数据融合或重铸。三个扩展包都是ggplot2扩展包的作者HadleyWickham(被称作“一个改变R的人”)杰作,可以通过install.packages(“包名”)进行在线安装。reshape扩展包中的melt()函数用于将宽数据转换为长数据,即将多行聚成列,从而将二维数据列表变成一维数据列表;cast()函数用于将长数据转换为宽数据,将一列根据变量展开为多行,从而将一维数据列表变成二维数据列表。23PAGE24将宽数据转换为长数据以下代码利用函数将chinese、english、mathematics三门成绩合为一列class,从而将二维数据列表变成一维数据列表。24>#使用reshape扩展包>df_melt<-reshape::melt(df,id.vars=c('name','gender'),+variable_name='class')>#使用reshape2扩展包>df_melt1<-reshape2::melt(df,id.vars=c('name','gender'),+='class',+='score')>#使用tidyr扩展包>df_gather<-tidyr::gather(df,key='class',+value='score',-c('name','gender'))>df_gathernamegenderclassscore1Emilyfemalechniese772Jacobmalechniese653Emmafemalechniese714Emilyfemaleenglish965Jacobmaleenglish686Emmafemaleenglish647Emilyfemalemathematics758Jacobmalemathematics859Emmafemalemathematics73>set.seed(1234)>df<-data.frame(name=c('Emily','Jacob','Emma'),+gender=c('female','male','female'),+chinese=sample(50:100,3),+english=sample(60:100,3),+mathematics=sample(70:100,3))>dfnamegenderchineseenglishmathematics1Emilyfemale7796752Jacobmale6568853Emmafemale716473PAGE25将长数据转换为宽数据以下代码分别利用reshape扩展包的cast()函数、reshape2扩展包的dcast()函数、tidyr扩展包的spread()函数将经过融合后的数据重铸成以前的样子。25>#使用reshape扩展包>df_cast<-reshape::cast(df_melt,name+gender~class,value='value')>#使用reshape2扩展包>df_dcast<-reshape2::dcast(df_melt1,name+gender~class,+value.var='score')>#使用tidyr扩展包>df_spread<-tidyr::spread(df_gather,'class','score')>df_spreadnamegenderchineseenglishmathematics1Emilyfemale7796752Emmafemale7164733Jacobmale656885数据聚合2608PAGE27常见聚合函数R语言内置了用于计算数据集中及离散趋势指标的函数。常见聚合函数及功能如表所示。27PAGE28自定义函数以下代码实现自定义统计指标函数,计算向量x的各项指标。28>set.seed(1234)>(x<-sample(1:10,10))[1]10654182793>#自定义描述统计函数>stat.desc<-function(x){+list('求和'=sum(x,na.rm=T),+'累计求和'=cumsum(x),+'最大值'=max(x,na.rm=T),+'最小值'=min(x,na.rm=T),+'平均值'=mean(x,na.rm=T),+'中位数'=median(x,na.rm=T),+'百分位数'=quantile(x,na.rm=T),+'极差'=range(x)[2]-range(x)[1],+'四分位距'=IQR(x,na.rm=T),+'方差'=var(x,na.rm=T),+'标准差'=sd(x,na.rm=T),+'变异系数'=sd(x,na.rm=T)/mean(x,na.rm=T))+}>stat.desc(x)$求和[1]55$累计求和

[1]10162125263436435255$最大值[1]10$最小值[1]1$平均值[1]5.5$中位数[1]5.5$百分位数

0%25%50%75%100%1.003.255.507.7510.00$极差[1]9$四分位距[1]4.5$方差[1]9.166667$标准差[1]3.02765$变异系数[1]0.5504819PAGE29结合dplyr包以上聚合函数结合dplyr扩展包的summarise()、summarise_all()、summarise_at()、summarise_if()等函数,可以实现更丰富的数据描述统计分析。以mtcars数据集为例,下面代码实现通过summarise()函数计算变量mpg的平均值、中位数、标准差。如果想同时计算mpg、disp变量的平均值、中位数和标准差,可以通过summarise_at()函数实现。29>mtcars%>%+summarise(mean

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论