R语言的基本数据结构课件

PPT
  • 阅读 80 次
  • 下载 0 次
  • 页数 54 页
  • 大小 1.056 MB
  • 2022-11-13 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
R语言的基本数据结构课件
可在后台配置第一页与第二页中间广告代码
R语言的基本数据结构课件
可在后台配置第二页与第三页中间广告代码
R语言的基本数据结构课件
可在后台配置第三页与第四页中间广告代码
R语言的基本数据结构课件
R语言的基本数据结构课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 54
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】R语言的基本数据结构课件.ppt,共(54)页,1.056 MB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-7178.html

以下为本文档部分文字说明:

第二讲R语言的基本数据结构NameIDTeam.NumDutyGrade1Grade2Grade3Grade4Grade5WangN2007091captainNANANANANATangMJ2007201memberNANANANANA………………………作业1:按下面表格的形式生

成本组信息的数据框,并提交原程序.Name为字符型、ID为数字型、Team.Num为分组因子、Duty为分组因子、Grade1-5为数值型Base:is.thingsBase:recursionGraphics:HersheyGraphics:JapaneseGraphics:graphicsG

raphics:imageGraphics:perspGraphics:plotmathLattice:intervalsLattice:labelsLattice:latticeLattice:panelStats:glm.vrStats:lm.glmStats:nlmStats:smooth作

业2:利用sample函数设计算法,把下面16个demo公平地分配给15个组,并提交原程序一、R语言的对象•所有在R语言中可操作的各种数据及各种表达式等都叫R语言的操作对象。对象命名:1、对象的名字必须是以一个字母开头(A–Z或a–z),中间可以包含字母,数字(0–9),点(.)及下

划线(_);2、R对对象的名字区分大小写;3、避免用R的各种包中的既有对象名来对对象命名:例如,if、for、pi等3、可以通过输入一个对象的名字来显示其内容,例如,一个名为n的对象,其内容是数值10:>n[1]10

对象的产生、查询及删除1、赋值:<-或=2、函数ls的功能是显示所有在内存中的对象:只会列出对象名>name<-”Carmen”;n1<-10;n2<-100;m1<-1>ls()>ls(pat=“m”)>ls.str()//将会展示内存中所有对象的详细信息3、删除:>rm(x)删除内存中

所有对象:>rm(list=ls())注:ls()函数中的一些选项同样可以运用到rm中来对象的基本属性•每个对象包含很多基本属性,常用的有对象的类型、存储类型、对象模式、对象长度、对象维度、对象名称等。数值型Numeric如100,0,-4.335字符型Character如“China”逻辑型

Logical如TRUE,FALSE因子型Factor表示不同类别复数型Complex如:2+3i对象的类型:>mode(object)对象的长度:>length(object);>fruit<-c(5,10,1,20)>names(fruit)<-c("orange","banana",

"apple","peach")>mode(fruit)[1]"numeric">length(fruit)[1]4对象属性的转换•常用对象转化函数>as.character()#转换为字符型>as.numeric()#转换为数值型>as.logical()#转换为逻辑

型>as.complex()#转化为复数型>as.factor()#转化为因子型>methods(as)#methods包中的全部转换函数>methods(is)#methods包中全部对象类型判别函数二、

数据的创建三、数值向量1、规则序列>x<-1:30>x<-c(1,2,4,7,11)#c()为应用最广泛的向量构造函数>y<-c(x,0,x)#把所有对象连接起来形成新的向量>y<-c(“animal”)>x<-se

q(1,5,by=0.5)#序列的起点、终点、步长x<-seq(length=50,from=-0.2,to=9,by=0.8)>x<-scan()#用键盘输入一些数据>rep(1,time=30)#创建一个所有元素都相同的向量>sequenc

e(4:5)#创建一系列联系的整数序列[1]123412345>gl(k,n)//k是水平数,n是每个水平重复的次数,有两个选项:length用来指定产生数据的个数,labels用来指定每个水平因子的名字>gl(3,5)

>gl(3,5.4)#???????2、随机序列R可以产生多种不同分布下的随机数序列。>sample(1:40,5)[1]25322359>sample(c("H","T"),10,replace=T)[1]"H""H""T""H""H""T""H""H

""H""H“分布函数的形式rfunc(n,p1,p2,...),其中func指概率分布函数,n为生成数据的个数,p1,p2,...是分布的参数数值。如:rnorm#随机产生正态分布的数据>rnorm(100,2,5)#mean=1,sd=5随机分布函

数rfuncr:random密度函数dfuncd:density累计概率密度函数pfuncp:probability分位数函数qfuncq:quantile3、分布函数>plot(rnorm(100,2,5))>x<-seq(-4,4,0.1)>

plot(x,dnorm(x),type="l")逻辑向量•逻辑向量包含TRUE、FALSE和NA(notavailabe)•逻辑向量可以同数值向量一起运算:TRUE=1,FALSE=0>Sequence

Num<-seq(1.1,4.2)>Logicvector<-SequenceNum>2.5>logicvector错误:找不到对象'logicvector'>Logicvector[1]FALSEFALSETRUETRUE•>c(1:3,NA)->NaData•>NaData•[1]123

NA•>NaData[8]<-8#将NaData第8项设置为8•>NaData•[1]123NANANANA8•>is.na(NaData)•[1]FALSEFALSEFALSETRUETRUETRUETR

UEFALSE字符向量•可以用两个单引号(‘)或两个双引号(“)去界定字符向量•“/”用来识别字符串中包含的(‘)或(“)•例子:>UserInfor<-c("name","user'spassword","e-mail")>

UserInfor[1]"name""user'spassword""e-mail“>labs<-paste(c("X","Y"),1:10,sep="")>labs[1]"X1""Y2""X3""Y4""X5""Y

6""X7""Y8""X9""Y10"复数向量>z<-complex(real=rnorm(10),imaginary=rnorm(10))>z[1]1.0464457+1.4921546i-0.0857576+0.6500323i-0.4077956+0.736

3948i[4]1.2992962+1.0821262i-1.3359859-2.2430534i1.0756972+1.4531898i[7]1.1084957+0.6604677i1.2716703+0.4288688i0.2792403+

0.4181003i[10]-1.0414731-2.2300299i>zz<-(rep(1:4,len=9)+1i*(9:1))/10[1]0.1+0.9i0.2+0.8i0.3+0.7i0.4+0.6i0.1+0.5i0.2+0.4

i0.3+0.3i0.4+0.2i[9]0.1+0.1i>zz.shift<-complex(modulus=Mod(zz),argument=Arg(zz)+pi)>zz.shift[1]-0.1-0.9i-0.2-0.8i

-0.3-0.7i-0.4-0.6i-0.1-0.5i-0.2-0.4i-0.3-0.3i[8]-0.4-0.2i-0.1-0.1i五、分组因子•R语言可以将一套数据中相同分类的数据进行分组,所用组别对象称为分组因子•可以用facto

r()函数生成一个分组因子•分组因子可以方便地对分组数据做相应计算,如:计算平均值、总和或按某种函数形式•例子:•>factor(sample(letters,10,replace=T),levels=letters)[1]gbwjczodpqLevels:abcdefghijklmnopqrst

uvwxyz六、数组及矩阵•数组是带多个下标的、类型相同的元素的多维数据集合,类型有数值型、字符型、逻辑型、复数型等•矩阵为二维数组•一维数组并不等效为向量•除了类型和长度等基本属性外,数组还有一个特殊属性叫做维数向量,用dim()定义数组

定义>FirstArray<-seq(1:24)>FirstArray[1]123456789101112131415161718192021222324>dim(FirstArray)<-c(3,4,2)#通过dim()

函数来定义数组的维数空间>FirstArray#数组的填充规则:越靠前的下标变化越快;#越靠后的下标变化越慢,,1[,1][,2][,3][,4][1,]14710[2,]25811[3,]36912,,2[,1][,2][,3][,4][1,]13

161922[2,]14172023[3,]15182124#等价于>FirstArray<-array(seq(1:24),dim=c(3,4,2))Dimnames属性>Prices<-array(c(20,24,22,56,76,87),dim=c(2,3),#d

imnames定义了维名+dimnames=list(c("vender1","vender2"),c("64M","128M","256M")))>Prices64M128M256Mvender1202276vender2245687>Prices[,c(“64M”,“256M”)]#通

过维名访问数组64M256Mvender12076vender22487向量,数组的混合运算规则:•1、表达式中各元素匹配时,总是从左到右。•2、在进行计算时比较短的向量会扩展数据以适应最大数量元素的操作数。扩展数据的基本规

则为循环地从第一个元素开始填充所需要的数据。•3、所有的数组必须具有相同的dim属性,否则返回一个错误。•4、任何一个向量的操作结果的长度大于数组间操作结果的长度时,R语言会产生错误。•5、如果数组间操作无误,那么计算结果也是一个相同维度的数组。>a1<-array(1:12,d

im=c(4,3))>a2<-array(1:9,dim=c(3,3))>a1[,1][,2][,3][1,]159[2,]2610[3,]3711[4,]4812>a2[,1][,2][,3][1,]147[2,]258[3,

]369>a1+a2错误于a1+a2:非整合陈列>a2<-array(1:9,dim=c(4,3))>a2[,1][,2][,3][1,]159[2,]261[3,]372[4,]483>a1+a2[,1][,2][,3][1

,]21018[2,]41211[3,]61413[4,]81615>a1*a2[,1][,2][,3][1,]12581[2,]43610[3,]94922[4,]166436不同dim属性相同dim属性不同dim属性相同dim属性>a3<-array(1:3,dim=c

(1,3))>a3[,1][,2][,3][1,]123>a2+a3错误于a2+a3:非整合陈列一维数组并不等效为向量>a4<-1:3>a4[1]123>a4+a2[,1][,2][,3][1,]2712

[2,]492[3,]684[4,]5106向量与数组运算>a5<-1:7>a4+a5[1]2465798警告信息:Ina4+a5:长的对象长度不是短的对象长度的整倍数不同长度的向量运算>a6<-1:13>a6+a2错误:dims[product12]与对象长度[13]不匹配此外

:警告信息:Ina6+a2:长的对象长度不是短的对象长度的整倍数>a7<-1:24>a7+a2错误:dims[product12]与对象长度[24]不匹配一维数组并不等效为向量不同长度的向量运算两个数组的外积>A<-array(1:4,dim=c(2

,2))>B<-array(1:12,dim=c(3,4))>A[,1][,2][1,]13[2,]24>B[,1][,2][,3][,4][1,]14710[2,]25811[3,]36912>B%o%A,,1,1[,1][,2][,3][,4][1,]14710[2,]25

811[3,]36912,,2,1[,1][,2][,3][,4][1,]281420[2,]4101622[3,]6121824,,1,2[,1][,2][,3][,4][1,]3122130[2,]6152433[3,]9182736,,2,2[,1][,2]

[,3][,4][1,]4162840[2,]8203244[3,]12243648>AB<-outer(B,A,“*”)#?outer()数组转置•aperm(a,perm,resize=TRUE)#a为数组,perm为转置下标向量>x<-array(1:6,2:3)>x[,

1][,2][,3][1,]135[2,]246>xt<-aperm(x,c(2,1))>xt[,1][,2][1,]12[2,]34[3,]56>x<-array(1:24,2:4)>x,,1[,1][,2][,3][1,]135[2,]246,,2[,1][,2][,3][

1,]7911[2,]81012,,3[,1][,2][,3][1,]131517[2,]141618,,4[,1][,2][,3][1,]192123[2,]202224>xt<-aperm(x,c(2,1,3))>xt,

,1[,1][,2][1,]12[2,]34[3,]56,,2[,1][,2][1,]78[2,]910[3,]1112,,3[,1][,2][1,]1314[2,]1516[3,]1718,,4[,1][,2][1,]1920[2,]2122[3,]2324七、矩阵#nrow定义行

数,ncol定义列数,dimnames定义行和列的名称,byrow定义矩阵的填充顺序,为T时按行填充,为F时按列填充>mdat<-matrix(c(1,2,3,11,12,13),nrow=2,ncol=3,byrow=TRUE,+dimname

s=list(c("row1","row2"),c("C.1","C.2","C.3")))>mdatC.1C.2C.3row1123row2111213>t(mdat)row1row2C.1111C.2212C.3313>xt<-aperm(mdat,c(2

,1))>xtrow1row2C.1111C.2212C.3313转置>t(mdat)row1row2C.1111C.2212C.3313>xt<-aperm(mdat,c(2,1))>xtrow1row2

C.1111C.2212C.3313转置>a1<-matrix(c(1,2,3,4,5,6),nrow=2,ncol=3)>a2<-matrix(seq(1:9),nrow=3,ncol=3)>a1[,1][,2][,3][1,]135[2,]246>a2[,1][,2][,3][1,]14

7[2,]258[3,]369>a1%*%a2[,1][,2][,3][1,]224976[2,]2864100>a1%*%a1错误于a1%*%a1:非整合参数>a2%*%a1错误于a2%*%a1:非整合参数两个矩

阵内积>Coefficient<-array(c(3,2,-2,1),dim=c(2,2))#系数矩阵>Result<-c(12,1)#结果矩阵>solve(Coefficient,Result)#sovle()返回线性方程组行列式结果[1]2-3#a=2,b=

-3求解线性方程组:3a-2b=122a+b=1>solve(Coefficient)#求矩阵Coefficient的逆[,1][,2][1,]0.14285710.2857143[2,]-0.28571430.4285714矩阵计算函数练习2.1熟练掌握矩阵计算的有关函数数组矩阵合

并•函数rbind()把参数变量按行拼成一个大矩阵,两个数组(或向量)的列数必须相等•函数cbind()把参数变量按列拼成一个大矩阵,两个数组(或向量)的行数必须相等>a1<-array(1:6,dim=c(2,3))>a2<-array(1:9,dim=

c(3,3))>a1[,1][,2][,3][1,]135[2,]246>a2[,1][,2][,3][1,]147[2,]258[3,]369>rbind(a1,a2)[,1][,2][,3][1,]135

[2,]246[3,]147[4,]258[5,]369>cbind(a1,a2)错误于cbind(a1,a2):矩阵的行数必需相符(见arg2)>t(a1)[,1][,2][1,]12[2,]34[3,]56>a1<-t(a1)>cbind(a1,a2)[,1][,2][

,3][,4][,5][1,]12147[2,]34258[3,]56369八、数据分割与选取•向量索引X[n]#第n个元素X[-n]#除了第n个元素外的XX[1:n]#前n个元素X[-(1:n)]#第n+1至最后的元素X[c(1,4,2)]#指定下标的元素X[“name”]#

名为name的元素X[X>3]#所有大于3的元素X[X>3&X<=5]#区间(3,5]的元素X[X%in%c(“a”,”and”,”the”)]#给定组c()中的元素>X<-1:9>names(X)<-l

etters[1:9]>Xabcdefghi123456789>X[6]f6>X[2:6]bcdef23456>X[-3]abdefghi12456789>X[-(5:9)]abcd1234>X[-c(5,9,2)]acdfgh134678>X[X>5]fghi

6789>X[X>5&X<=8]fgh678>X[c("c","g","d")]cgd374>X[X%in%letters[5:13]]namedinteger(0)>X[X%in%5:13]efghi56789>sstr<-c("c","ab","B

","bba","c","@","bla","a","Ba","%")>sstr[sstr%in%c(letters,LETTERS)][1]"c""B""c""a"例子•X[i,j]#下标为(i,j)的元素•X[i

,]#第i列•X[,j]#第j列•X[,c(1,3)]#第1,3列•X[“name”,]#名为”name”的行数组具有类似的数据分割与选取方法矩阵索引练习2.2熟练掌握数据分割与选取的方法>X<-matrix(1

:12,nrow=3,ncol=4,byrow=T,dimnames=list(c(letters[1:3]),LETTERS[4:7]))>XDEFGa1234b5678c9101112>X[2,3][1]7>X[2,]DEF

G5678>X[,4]abc4812>X[,c(1,3)]DFa13b57c911>X["a",]DEFG1234九、数据列表•数据列表(list)是一组数据元素的集合,这些数据元素可以是不同的数据结构(d

im属性,数据类型等)•list()函数可以组合任意对象>FamilyInfo<-list(hostname="joe",wife="rose",no.children=3,child.ages=c(1,3,7))>Fam

ilyInfo$hostname[1]"joe"$wife[1]"rose"$no.children[1]3$child.ages[1]137>FamilyInfo$wife#通过元素的名字来访问[1]"rose“>FamilyInfo[

3]#通过元素的编号来访问$no.children[1]3>FamilyInfo[[3]][1]3例子数据列表操作•长度扩展>length(FamilyInfo)[1]4>FamilyInfo[5]<-list(address=c("10thF,

HongXingBuilding,No.100,JainYeRoad"))>FamilyInfo$hostname[1]"joe"$wife[1]"rose"$no.children[1]3$child.ages[1]137[[5]

][1]"10thF,HongXingBuilding,No.100,JainYeRoad"数据列表合并>FamilyBirthday<-list(hostbirthday="1979/10/08",wifebirthday="197

3/07/09")>c(FamilyInfo,FamilyBirthday)->Family#函数c()可以连接数据列表>Family$hostname[1]"joe"$wife[1]"rose"$no.children[1]3$child.ages[1]137

[[5]][1]"10thF,HongXingBuilding,No.100,JainYeRoad"$hostbirthday[1]"1979/10/08"$wifebirthday[1]"1973/07/09"数据框(dataframe)是

一个属于"data.frame"类的列表。不过,对于可能属于数据框的列表对象有下面一些限制条件,1、分量必须是向量(数值,字符,逻辑),因子,数值矩阵,列表或者其他数据框;2、矩阵,列表和数据框为新的数据框提供了尽可能多的变量,因为它们各

自拥有列,元素或者变量;3、数值向量,逻辑值,因子保持原有格式,而字符向量会被强制转换成因子并且它的水平就是向量中出现的独立值;4、在数据框中以变量形式出现的向量结构必须长度一致,矩阵结构必须有一样的行数.数据框常常会被看作是一个由不同模式和属性的列构成的

矩阵。它能以矩阵形式出现,行列可以通过矩阵的索引习惯访问。十、数据框创建数据框>L3<-LETTERS[1:3]>d<-data.frame(cbind(x=1,y=1:10),fac=sample(L3,10,replace=TRUE))>dxyfac111C212A313B414C

515A616B717B818B919B10110A>d[1]x112131415161718191101>d[[1]][1]1111111111>mode(d[1])[1]"list">mode(d[[1]])[1]"numeric

">length(d[1])[1]1>length(d[[1]])[1]10>d[[2]][3][1]3>d<-data.frame(cbind(x=1,y=1:10),+fac=sample(L3,10,replace=T

RUE),+HT=sample(c("H","T"),10,replace=T))>dxyfacHT111BT212AH313BH414AT515CT616AT717BH818CT919CH10110AT>rbin

d(class=sapply(d,class),mode=sapply(d,mode))xyfacHTclass"numeric""numeric""factor""factor"mode"numeric""numeri

c""numeric""numeric">d<-data.frame(cbind(x=1,y=1:10),fac=I(sample(L3,10,replace=TRUE)),HT=sample(c("H","T"),10,replace=T))>dxyfacHT11

1AH212AT313CT414AT515BH616CH717CT818AH919AT10110CH>rbind(class=sapply(d,class),mode=sapply(d,mode))xyfacHT

class"numeric""numeric""AsIs""factor"mode"numeric""numeric""character""numeric">d[[3]][1]"A""A""C""A""B

""C""C""A""A""C">d[[4]][1]HTTTHHTHTHLevels:HT函数I():Changetheclassofanobjecttoindicatethatitshouldbetreated„asis‟十一、数据运算练习2

.3熟练掌握数据运算的有关符号和函数十二、数据的选择与操作十三、高级数据处理•对于向量,可以用函数直接对其进行计算•对于数组和矩阵,如果需要对其中一维(或若干维)进行某种计算时,则可以用apply()函数自定义数组的操作.•apply(X,MARGIN,FUN,…)#X给定数组,MARGIN

指定维数,FUN自定义计算函数。#FUN为R自带包中的函数>X<-matrix(1:24,nrow=4)>X[,1][,2][,3][,4][,5][,6][1,]159131721[2,]2610141822[3,]3711151923

[4,]4812162024>apply(X,MARGIN=1,sum)[1]66727884>apply(X,MARGIN=2,sum)[1]102642587490#FUN为自定义函数>f<-function(V){d=sd(V)/mean(V);r

eturn(d);}>ffunction(V){d=sd(V)/mean(V);return(d);}>apply(X,MARGIN=2,f)[1]0.516397780.198614530.122951850.089034100.069783480.05737753>apply(X

,MARGIN=1,f)[1]0.68030130.62360960.57563960.5345225例子•lapply(X,FUN)#应用FUN到列表X的每个元素•tapply(X,INDEX,FUN)#根据X的索引(INDEX)对不完全的数列应用FUN•

sapply()#同lapply

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?