R软件第二讲-数据操作

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

R向量、多维数组和矩阵1、数据表示2、应用实例3、实验练习实验内容实验目的学习R中向量、多维数组和矩阵的表示方法常量•常量为:数值型、逻辑型和字符型三种,其中•数值型数据如:123,123.45,1.2345e30•字符型如:“Weight”,“李明”是字符型;•逻辑真值写为T或TRUE(注意区分大小写,写t或true都没意义),逻辑假值写为F或FALSE。•复数常量就用3.5-2.1i这样的写法表示。•R中的数据可以取缺失值,用符号NA代表缺失值。•函数is.na(x)返回x是否缺失值(返回值T或F)。向量(Vector)与赋值•向量是有相同基本类型的元素序列,即一维数组•定义向量的最常用办法是使用函数c(),它把若干个数值或字符串组合为一个向量,比如:x-c(1:3,10:13)x[1]12310111213•R中用符号“-”、“=”来为变量赋值。•另一种赋值的办法是用assign函数,比如x1=c(1,2)和assign(“x1”,c(1,2))相同•函数length(x)可以计算向量x的长度。向量运算•可以对向量进行加(+)减(-)乘(*)除(/)、乘方(^)运算,其含意是对向量的每一个元素进行运算。•例如:x-c(1,4,6.25)y=x*2+1y[1]3.09.013.5y[2][1]9.0•%/%表示整数除法(比如5%/%3为1),%%表示求余数(如5%%3为2)。•可以用向量作为函数自变量,sqrt、log、exp、sin、cos、tan等函数都可以用向量作自变量,结果是对向量的每一个元素取相应的函数值•函数min和max分别取向量自变量的最小值和最大值,函数sum计算向量自变量的元素和,函数mean计算均值,函数var计算样本方差(分母为n-1),函数sd计算标准差•如果求var(x)而x是矩阵,则结果为样本协方差阵。(行向量为观测值)•负数开根号要补充成复数形式•sqrt(-4)[1]NaN#数值运算中,返回非数值的非凡值warning:……sqrt(-4+0i)[1]2i•sort(x)返回x的元素从小到大排序的结果向量order(x)返回使得x从小到大排列的元素下标向量(x[order(x)]等效于sort(x))。x=c(2,4,8,6,10)order(x)[1]12435x[order(x)][1]246810•任何数与缺失值的运算结果仍为缺失值。例如,2*c(1,NA,2)[1]2NA4sum(c(1,NA,2))[1]NA•最大最小值及其查询•x-c(5,2,4,1,10)min(x)[1]1max(x)[1]10which.min(x)[1]4which.max(x)[1]5range(x)[1]110产生有规律的数列•在R中很容易产生一个等差数列。例如,1:n产生从1到n的整数列,-2:3产生从-2到3的整数列,5:2产生反向的数列:•注意优先级1:n-1不是代表1到n-1而是向量1:n减去1,1:5-1[1]012341:(5-1)[1]1234•seq函数是更一般的等差数列函数。如只指定一个自变量n0,则seq(n)相当于1:n。指定两个自变量时,第一量是开始值,第二量是结束值,如seq(-2,3)是从-2到3,默认公差为1。•R函数调用的一个很好的特点是它可以使用不同个数的自变量,函数可以对不同类型的自变量给出不同结果,自变量可以用“自变量名=自变量值”的形式指定。例如,seq(-2,3)可以写成seq(from=-2,to=3)。可以用一个by参数指定等差数列的增加值,例如:seq(0,2,0.7)[1]0.00.71.4也可以写成seq(from=0,to=2,by=0.7)。参数的位置可以互换•有参数名的参数的次序任意,如:seq(0,by=0.7,to=2)[1]0.00.71.4•可以用length参数指定数列长度,如seq(from=10,length=5)产生10到14。•seq函数还可以用一种seq(along=向量名)的格式,这时只能用这一个参数,产生该向量的下标序列,如:x[1]1.004.006.25seq(along=x)[1]123也可以加入by这个参数•另一个类似的函数是rep,它可以重复第一个自变量若干次,例如:rep(x,3)[1]1.004.006.251.004.006.251.004.006.25第一个参数名为x,第二个参数名为times(重复次数)。rep(x,each=3)[1]1.001.001.004.004.004.006.256.256.25此外numeric(n)可以产生一个长度为n的零向量•向量可以取逻辑值,如:a=c(T,T,F)a[1]TRUETRUEFALSE当然,逻辑向量往往是一个比较的结果,如:x-c(1.00,4.00,6.25)b=x3b[1]FALSETRUETRUE逻辑向量•一个向量与常量比较大小,结果还是一个向量,元素为每一对比较的结果逻辑值。•两个向量也可以比较,如:log(10*x)[1]2.3025853.6888794.135167log(10*x)x[1]TRUEFALSEFALSE比较运算符包括,=,,=,==,!=。•两个逻辑向量可以进行与(&)、或(|)运算,结果是对应元素运算的结果。对逻辑向量x计算!x表示取每个元素的非。例如:x=c(1,4,6.25,1.6)(x1.5)&(x3)[1]FALSEFALSEFALSETRUEx=c(T,F,F)!x[1]FALSETRUETRUE•判断一个逻辑向量是否都为真值的函数是all,如:all(log(10*x)x)[1]FALSE•判断是否其中有真值的函数是any,如:any(log(10*x)x)[1]TRUE•函数is.na(x)用来判断x的每一个元素是否缺失。如is.na(c(1,NA,3))[1]FALSETRUEFALSE•逻辑值可以强制转换为整数值,TRUE变成1,FALSE变成0。例如,age65为老年人,否则为年轻人,可以用c(“young”,“old”)[(age65)+1]表示。当年龄大于65时age65等于TRUE,加1则把TRUE转换为数值型的1,结果得2,于是返回第二个下标处的“old”。否则等于0+1下标处的“young”。age=c(89,20,10,66);c('young','old')[(age65)+1];[1]oldyoungyoungold•缺失数据•NA表示缺失、NaN表示不确定的数•注意下面例子的比较•x-c(0/1,0/0,1/0,NA);x[1]0NaNInfNAis.nan(x)[1]FALSETRUEFALSEFALSEis.na(x)[1]FALSETRUEFALSETRUEis.finite(x)[1]TRUEFALSEFALSEFALSEis.infinite(x)[1]FALSEFALSETRUEFALSE字符型向量•向量元素可以取字符串值。例如:c1=c(x,sin(x))c1[1]xsin(x)ns=c(Weight,Height,“age)ns[1]WeightHeightage•paste函数用来把它的自变量连成一个字符串,中间用空格分开,例如:paste(My,Job)[1]MyJobpaste('Hi',‘Goodmorning')[1]HiGoodmorning•连接的自变量可以是向量,这时各对应元素连接起来,长度不相同时较短的向量被重复使用。自变量可以是数值向量,连接时自动转换成适当的字符串表示,例如:paste(c(X,Y),=,1:4)[1]X=1Y=2X=3Y=4•分隔用的字符可以用sep参数指定,例如:paste('result.',1:5,sep=)[1]result.1result.2result.3result.4result.5•如果给paste()函数指定了collapse参数,则把字符串向量的各个元素连接成一个字符串,中间用collapse指定的值分隔。比如paste(c('a','b'),collapse='.')[1]'a.b'•还可以和日期函数一起合并,显示当天的日历和时间•paste(“Todayis”,date())[1]“TodayisMonSep269:20:352011”复数向量•R支持复数运算。复数常量只要用3.5+2.1i这样的格式即可。复向量的每一个元素都是复数。Re()计算实部,Im()计算虚部,Mod()计算复数模,Arg()计算复数幅角。•complex(2)[1]0+0i0+0i•complex(2,4,6)[1]4+6i4+6i•complex(1,4,6)[1]4+6i•y=1:2+1i*(8:9)#注意这里i前面的1不能少y[1]1+8i2+9iRe(y)[1]12Im(y)[1]89Mod(y)[1]8.0622589.219544Arg(y)[1]1.4464411.352127向量下标运算•某一个元素只要用x[i]的格式访问,其中x是一个向量名,或一个取向量值的表达式,如:x[1]1.004.006.25x[2][1]4(c(1,3,5)+5)[2][1]8•可以单独改变一个元素的值,例如:x[2]-125x[1]1.00125.006.25•R提供了四种方法来访问向量的一部分,格式为x[v],x为向量名或向量值的表达式,v是如下的表示下标向量:一、取正整数值的下标向量v为一个向量,取值在1到length(x)之间,取值允许重复,例如,x[c(1,3)][1]1.006.25x[1:2][1]1125x[c(1,3,2,1)][1]1.006.25125.001.00c(a,b,c)[rep(c(2,1,3),3)][1]bacbacbac二、取负整数值的下标向量v为一个向量,取值在-length(x)到-1之间,表示扣除相应位置的元素。例如:x[-(1:2)][1]6.25x[-3][1]1.00125.00三、取逻辑值的下标向量v为和x等长的逻辑向量,x[v]表示取出所有v为真值的元素,如:x[1]1.00125.006.25x10[1]TRUEFALSETRUEx[x10][1]1.006.25#取出所有小于10的元素组成子集x[x0][1]numeric(0)#下标都是F,是个零长度的向量逻辑值下标是一种强有力的检索工具,例如x[sin(x)0]可以取出x中所有正弦函数值为正的元素组成的向量。四、取字符型值的下标向量在定义向量时可以给元素加上名字,例如:ages-c(Li=33,Zhang=29,Liu=18)ages[1]LiZhangLiu332918ages[1][1]Li33ages[1]=2#可以改变向量中字符型元素取值ages[1][1]Li2•向量还可用元素名字来访问元素或元素子集,ages[c(Li,Liu)][1]LiLiu3318•向量元素名可以后加,利用names(),例如:ages1=c(33,29,18)names(ages1)=c(Li,Zhang,Liu)ages1[1]LiZhangLiu332918•R中还可以改变一部分元素的值,例如:x[1]1.00125.006.25x[c(1,3)]=c(144,169)x[1]144125169注意赋值的长度必须相同,例外是可以把部分元素赋为一个统一值:x[c(1,3)]=0x[1]01250•要把向量所有元素赋为一个相同的值而又不想改变其长度,可以用x[]的写法:x[]=0注意这与“x=0”是不同的,前者赋值后向量长度不变,后者使向量变为标量0。改变部分元素值的技术与逻辑值下标方法结合可以定义向量的分段函数,例如:要定义y=f(x)为当x0时取1-x,否则取

1 / 80
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功