统计建模与R软件 第二讲课件.ppt

上传人:小飞机 文档编号:1455420 上传时间:2022-11-27 格式:PPT 页数:150 大小:4.51MB
返回 下载 相关 举报
统计建模与R软件 第二讲课件.ppt_第1页
第1页 / 共150页
统计建模与R软件 第二讲课件.ppt_第2页
第2页 / 共150页
统计建模与R软件 第二讲课件.ppt_第3页
第3页 / 共150页
统计建模与R软件 第二讲课件.ppt_第4页
第4页 / 共150页
统计建模与R软件 第二讲课件.ppt_第5页
第5页 / 共150页
点击查看更多>>
资源描述

《统计建模与R软件 第二讲课件.ppt》由会员分享,可在线阅读,更多相关《统计建模与R软件 第二讲课件.ppt(150页珍藏版)》请在三一办公上搜索。

1、第2章 R软件的使用,郭广报 统计计算,讲解大纲,2.1R软件简介2.2数字、字符与向量2.3对象和它的模式与属性2.4因子2.5多维数组和矩阵2.6列表与数据框2.7读写数据文件2.8控制流2.9编写自己的函数2.10图形功能2.11程序打包,2.1R软件简介,R软件是一个开放的统计编程环境,是一种语言,是S语言的一种实现;R软件是完全免费的,http:/www.r-project.org;,2.1.1R软件的下载与安装,http:/cran.r-project.org下载与安装Demo,2.1.2初识R软件,例2.1某学校在体检时测得12名女中学生体重X1(kg)和胸围X2(cm)资料如表

2、2.1所示,试计算体重与胸围的均值与标准差。表2.1 学生体检资料,2.1.2初识R软件(续),解:# 输入体重X1-c(35, 40, 40, 42, 37, 45, 43, 37, 44, 42, 41, 39)# 计算体重的均值和标准差mu1-mean(X1); sigma1-sd(X1) # 输入胸围X2-c(60, 74, 64, 71, 72, 68, 78, 66, 70, 65, 73, 75)# 计算胸围的均值和标准差mu2-mean(X2); sigma2-sd(X2);,2.1.2初识R软件(续),例2.2绘出例2.1中12名学生体重与胸围的散点图和体重的直方图。解:Pl

3、ot(X1,X2)hist(X1) # 绘出体重的直方图hist(X1, probability = TRUE,main = paste(Histogram of , weight), xlab = weight),2.1.2初识R软件(续),例2.3设有文本文件exam0203.txt,其内容与格式参见文件,其中第一行相当于表头,说明变量的属性,即说明各列的内容,如第一列是姓名,第二列是性别,第三列是年龄,第四列是身高(cm),第五列是体重(lb),从第二行到最后一行是变量的内容,试从该文件中读出数据,并对身高和体重作回归分析。,2.1.2初识R软件(续),解:rt-read.table(e

4、xam0203.txt, head=TRUE); rtlm.sol-lm(WeightHeight, data=rt)summary(lm.sol),2.1.3R软件主窗口与快捷方式,2.1.3R软件主窗口与快捷方式,其它菜单Demo,2.2数字、字符与向量,1、向量的赋值R软件中最简单的运算是向量赋值,有三种形式:xx,2.2.2向量的运算(续),2、向量的运算对于向量可以作加(+)、减(-)、乘(*)、除(/)和乘方()运算,其含义是对向量的每一个元素进行运算,如:x-c(-1,0,2);y-c(3,8,2)v-2*x+y+1;vx*yx/yx2yx5%/%3#整数除法5%3#求余数,2.

5、2.2向量的运算(续),exp(x)sqrt(y)3、与向量运算有关的函数(1)求向量的最小值、最大值和范围的函数x-c(10,6,4,7,8)min(x)max(x)range(x)which.min(x)which.max(x),2.2.2向量的运算(续),(2)求和函数、求乘积函数#求和sum(x)#求分量连乘积prod(x)#求向量长度length(x),2.2.2向量的运算(续),(3)中位数、均值、方差、标准差和顺序统计量#求中位数median(x)#求均值mean(x)#求方差var(x)#求标准差sd(x)#排序,得到和x长度相同的sort(x),2.2.2产生有规律的序列,1

6、.等差数列a:b2.316:64:7.62.等间隔函数seq()函数是更一般的函数它产生等距间隔的数列其基本形式为:seq(from=value1, to= value2, by=value3)seq(-5, 5, by=.2) - s1对于seq函数还有另一种使用方式 seq(length=value2, from=value1, by=value3) s2 -seq(length=51, from=-5, by=.2),2.2.2产生有规律的序列,3.重复函数rep()是重复函数它可以将某一向量重复若干次再放入新的变量中如 : s -rep(x, times=3)#即将变量重复3倍放在变量

7、s中如x -c(1, 4, 6.25); xs -rep(x, times=3); s,2.2.3逻辑向量,与其它语言一样R软件允许使用逻辑操作当逻辑运算为真返值为TRUE,当逻辑运算为假返值为FALSE.例如x 3逻辑运算符有, =, = (表示TRUE等于)和TRUE!=(表TRUE示不等TRUE)all(c(1, 2, 3, 4, 5, 6, 7) 3) any(c(1, 2, 3, 4, 5, 6, 7) 3),2.2.4 缺失数据,用NA表示某处的数据缺省缺失如z -c(1:3, NA); z函数is.na()是检测缺失数据的函数,如果返回值为真(TRUE),则说明此数据是确实数据,

8、如果返回值为假(FALSE),则此数据不是缺失数据,如:ind-is.na(z);ind#将缺失数据改为0zis.na(z)-0is.nan(),is.finite(),2.2.5 字符型向量,向量元素可以字符串值,例如: y-c(er,sdf,dim,haha,good)可用paste函数把它的自变量连成一个字符串,中间用空格分开,例如:paste(My, Job)labs-paste(X,1:6,sep=)paste(result.,1:4,sep=)paste(1:10) #same as as.character(1:10)paste(Today is ,date()paste(c(a

9、,b),collapse=.),2.2.6 复数向量,R 支持复数运算,复数常量只要用通常的格式,如3.5+2.1i,complex模式的向量为复数元素的向量,可以用complex()函数生成复数向量,如x z plot(z) lines(z)对于复数运算,Re()是计算复数的实部,Im()是计算复数的虚部,Mod()是计算复数的模,Arg()是计算复数的幅角。,2.2.7向量下标运算,R软件提供了十分灵活的访问向量元素和向量子集的功能。向量中的某一个元素可以用xi的格式访问,其中x是一个向量名,或一个取向量值的表达式,如x-c(1,4,7)x2(c(1,3,5)+5)2可以单独改变一个或多个

10、元素的值,如:x2-125xc(1,3)-c(144,169);x,2.2.7向量下标运算,1、逻辑向量v为和x等长的逻辑向量,xv表示取出所有v为真值得元素,如:x-c(1,4,7)x5xx5可以将向量中缺失数据赋值为0z-c(-1,1:3,NA)zis.na(z)-0,#or(z+1)is.na(z)x# others,2.2.7向量下表运算,2、下标的正整数运算v为一个向量,下标取值在1到length(v)之间,取值允许重复,如:v-10:20vc(1,3,5,9)v1:5vc(1,2,3,2,1)# other,2.2.7向量下表运算,3、下标的负整数运算注:表示扣除相应的元素v为一个

11、向量,下标取值在- length(v) ,到-1之间v-c(1:5)4、取字符型值得下标向量在定义向量时可以给元素加上名字,如ages-c(Li=33,Zhang=29,Liu=18)#元素可以通过下标和名字来进行访问agesZhang#元素的名字也可以后加fruit-c(5,10,2,20)names(fruit)-c(orange,banana,apple,peach); fruit,2.3对象和它的模式与属性,R是一种基于对象的语言,R的对象包括了若干元素作为其数据,另外,还可以有一些特殊数据称为属性(attribute),并规定了一些特定的操作(如打印、绘图);R对象分为:单纯对象、复

12、合对象单纯对象:所有元素都是一种基本类型,复合对象的元素可以是不同类型的对象;,2.3.1固有属性:mode和length,R对象都有两个基本的属性: mode(类型)属性和length(长度)属性,比如向量的类型为logical(逻辑型)、numeric(数值型)、 complex(复数型)、character(字符型),比如:mode(c(1,3, 5)5)R对象有一种特别的null(空值型)型,只有一个特殊的NULL值为这种类型,表示没有值(不同于NA,NA是一种特殊值,而NULL根本没有对象值),2.3.1固有属性:mode和length,要判断某对象是否某类型,有许多个类似于is.n

13、umeric()的函数可以完成 is.numeric (x)用来检验对象x是否为数值型,它返回一个逻辑型结果is.character()可以检验对象是否为字符型,等等如:z - 0:9is.numeric (z)is.character(z)长度属性表示R对象元素的个数,比如length(2:4)length(z),2.3.1固有属性:mode和length,R可以强制进行类型转换,例如digits-as. character(z);digitsd-as.numeric(digits); d,2.3.2 修改对象的长度,对象可以取0长度或正整数为长度 R允许对超出对象长度的下标赋值,这时对象长

14、度自动伸长以包括此下标,未赋值的元素取缺失值(NA),例如:x-numeric()x3-17;x要增加对象的长度只需作赋值运算就可以了,如x-1:3x-1:4要缩短对象的长度又怎么办呢?只要给它赋一个长度短的子集就可以x-xl:2;xalpha-1:10alpha-alpha2*1:5alpha length(alpha); alpha,2.3.3 attributes()和attr()函数,attributes(object)返回对象object的各特殊属性组成的列表,不包括固有属性mode和length.例如:x-c(apple=2.5,orange=2.1);xattributes(x)

15、可以用attr(object,name)的形式存取对象object的名为name的属性,例如,attr (x, names) 也可以把attr()函数写作赋值的左边以改变属性值或定义新的属性,例如,attr(x, names)-c(applel, grapes); xattr(x,type)-fruit; xattr(x,type),2.3.4对象的class属性,在R中可以用特殊的class属性来支持面向对象的编程风格,对象的class属性用来区分对象的类,可以写出通用函数根据对象类的不同进行不同的操作,比如,print()函数对于向量和矩阵的显示方法就不同,plot()函数对不同类的自变量

16、作不同的图形。为了暂时去掉一个有类的对象的class属性,可以使用unclass (object)函数。,2.4因子,统计中的变量有几种重要类别:区间变量、名义变量和有序变量,区间变量取连续的数值,可以进行求和、平均值等运算,名义变量和有序变量取离散值;可以用数值代表,也可以是字符型值,其具体数值没有加减乘除的意义,不能用来计算,而只能用来分类或计数,名义变量如性别、省份、职业,有序变量如班级、名次。,2.4.1 factor()函数,因为离散变量有各种不同表示方法,在R软件中,为了统一起见,使用因子(factor)来表示这种类型的变量,例如,知道5位学生的性别,用因子变量表示sex-c(M,

17、F,M,M, F)sexf -factor(sex); sexf可用函数levels()得到因子的水平,如sex.level-levels(sexf);sex.level对于因子向量可用函数table()来统计各类数据的频数sex.tab-table(sexf);sex.tab,2.4.2tapply()函数,tapply()函数形式tapply(X, INDEX, FUN = NULL, ., simplify = TRUE) 其中X是一对象,通常是一向量,INDEX是与X有同样长度的因子,FUN是需要计算的函数,simplify 是逻辑变量,取为TRUE(缺省)或FALSEheight-c

18、(174,165,180,171,160) tapply(height,sex,mean),2.4.3gl()函数,gl(n, k, length = n*k, labels = 1:n, ordered = FALSE)其中n为水平数,k为重复的次数, length为结果的长度, labels是一个n维向量,表示因子水平,ordered是逻辑变量,表示是否为有序因子,缺省值为FALSEgl(3,5)gl(3,1,15),2.5 多维数组和矩阵,2.5.1 生成数组或矩阵数组(array)可以看成是带多个下标的类型相同的元素的集合,常用的是数值型的数组如矩阵,也可以有其它类型(如字符型、逻辑型

19、、复数型)R可以很容易地生成和处理数组,特别是矩阵(二维数组)数组有一个特征属性叫做维数向量(dim属性),维数向量是一个元素取正整数值的向量,其长度是数组的维数,比如维数向量有两个元素时数组为二维数组(矩阵)维数向量的每一个元素指定了该下标的上界,下标的下界总为1,2.5.1 生成数组或矩阵,1将向量定义成数组向量只有定义了维数向量(dim属性)后才能被看作是数组,比如:z-1:12dim(z)-c(3,4)注意:矩阵的元素是按列存放的,也可以把向量定义为一维数组,例如:dim (z)-12,2.5.1 生成数组或矩阵,2用array()函数构造多维数组 R软件可以用array()函数直接构

20、造数组,其构造形式为array(data=NA, dim=length(data), dimnames=NULL)其中data是一个向量数据,dim是数组各维的长度,缺省时为原向量的长度dimnames是数组维的名字,缺省时为空,如 x-array(1:20,dim=c(4,5)产生一个4x5的二维数组(矩阵),2.5.1 生成数组或矩阵,另一种方式为z-array(0,dim=c(3,4,2)它定义了一个3*4*2的三维数组,其元素均为0这种方法常用来对数组作初始化3用matrix()函数构造矩阵 函数matrix()是构造矩阵(二维数组)的函数,其构造形式为 matrix(data=NA,

21、 nrow=l, ncol=l,byrow=FALSE, dimnames=NULL),2.5.1 生成数组或矩阵,其中data是一个向量数据,nrow是矩阵的行数,ncol是矩阵的列数,当byrow=TRUE时,生成矩阵的数据按行放置,缺省时相当于byrow=FALSE,数据按列放置 dimnames是数组维的名字,缺省时为空,如构造一个3x5阶的矩阵A-matrix(1:15,nrow=3,ncol=5,byrow=TRUE),2.5.2 数组下标,数组与向量一样,可以对数组中的某些元素进行访问,或进行运算。1数组下标 要访问数组的某个元素,只要写出数组名和方括号内的用逗号分开的下标即可,

22、如a2,1,2如 a-1:24 dim(a)-c(2,3,4) a2,1,2,2.5.2 数组下标,更进一步还可以在每一个下标位置写一个下标向量,表示这一维取出所有指定下标的元素,如a1,2:3,2:3取出所有第一下标为1,第二下标为2或3,第三下标为2或3的元素,如a1,2:3,2:3注意,因为第一维只有一个下标,所以退化了,得到的是一个维数向量为22的数组,另外,如果略写某一维的下标,则表示该维全选,例如,a1,2.5.2 数组下标,a,或a都表示整个数组,比如a-0可以在不改变数组维数的条件下把元素都赋成0还有一种特殊下标办法是对于数组只用一个下标向量(是向量,不是数组),比如a3:10

23、 这时忽略数组的维数信息把表达式看作是对数组的数据向量取子集,2.5.2 数组下标,2不规则的数组下标在R语言中,甚至可以把数组中的任意位置的元素作为数组访问,其方法是用一个二维数组作为数组的下标,二维数组的每一行是一个元素的下标,列数为数组的维数,例如,要把上面的形状为2x3x4的数组a的第1,1,1,2,2,3,1,3,4,2,1,4号共四个元素作为一个整体访问,先定义一个包含这些下标作为行的二维数组:b-matrix(c(1,1,1,2,2,3,1,3,4,2,1,4),ncol=3,byrow=T)ab注意取出的是一个向量,我们还可以对这几个元素赋值,如:ab-c(101,102,10

24、3,104)或ab-0,2.5.3 数组的四则运算,可以对数组之间进行四则运算(+、一、*、),这时进行的是数组对应元素的四则运算,参加运算的数组一般应该是相同形状的(dim属性完全相同)例如:A-matrix(1:6,nrow=2,byrow=T);AB - matrix(1:6, nrow=2) ; BC - matrix (c (1, 2, 2 ,3,3,4) , nrow=2) ; CD - 2*C+A/B; D,2.5.3 数组的四则运算,形状不一致的向量(或数组)也可以进行四则运算,一般的规则是将向量(或数组)中的数据与对应向量(或数组)中的数据进行运算,把短向量(或数组)的数据循

25、环使用,从而可以与长向量(或数组)数据进行匹配,并尽可能保留共同的数组属性,例如,x1-c(100,200)x2-1:6x1+x2x3-matrix(1:6, nrow=3)x1+x3,2.5.4 矩阵的运算,1转置运算对于矩阵A,函数t(A)表示矩阵4的转置,即AT.如A-matrix(1:6,nrow=2); A2求方阵的行列式函数det()是求方阵行列式的值,如det(matrix(1:4, ncol=2),2.5.4 矩阵的运算,3向量的内积对于n维向量x,可以看成n*l阶矩阵或1*n阶矩阵,若x与y是相同维数的向量,则x%*%y表示x与y作内积例如,x-1:5;y-2*1:5x%*%

26、y函数crossprod()是内积运算函数(表示交叉乘积),crossprod(x,y)计算向量x与y的内积,即t(x)%*%ycrossprod (x)表示x与y的内积,即|x|22. 类似地, tcrossprod(x,y)表示x%*%t(y),即x与y的外积,也称为叉积 tcrossprod (x)表示x与x作外积,2.5.4 矩阵的运算,4向量的外积(叉积) 设x,y可是n维向量,则x%o%y表示x与y作外积例如,x-1:5;y-2*1:5x%o%y函数outer()是外积运算函数, outer(x,y)计算向量x与y的外积,它等价于x%o%y函数outer()的一般调用格式为:out

27、er(X, Y, FUN=*, .)其中X,Y矩阵(或向量),fun是作外积运算函数,缺省值为乘法运算,2.5.4 矩阵的运算,5矩阵的乘法如果矩阵A和B具有相同的维数,则A*B表示矩阵中对应的元素的乘积, A%*%B表示通常意义下的两个矩阵的乘积(当然要求矩阵A的列数等于矩阵B的行数)如A-array(1:9,dim=(c(3,3)B-array(9:1,dim=(c(3,3)C-A*B; CD-A%*%B;D,2.5.4 矩阵的运算,由乘法的运算规则可以看出,x%*%A%*%x表示的是二次型 函数crossprod(A,B)表示的是t(A)%*%B,函数tcrossprod(A,B)表示的

28、是A%*%t(B),2.5.4 矩阵的运算,6生成对角阵和矩阵取对角运算函数diag()依赖于它的变量,当v是一个向量时, diag (v)表示以v的元素为对角线元素的对角阵,当M是一个矩阵时,则diag(M)表示的是取M对角线上的元素的向量,如v-c(1,4,5)diag(v)M-array(1:9,dim=c(3,3)diag(M),2.5.4 矩阵的运算,7解线性方程组和求矩阵的逆矩阵若求解线性方程组Ax =b,其命令形式为so1ve(A,b),求矩阵A的逆,其命令形式为so1ve(A)A-t(array(c(1:8,10),dim=c(3,3)b-c(1,1,1)x-solve (A,

29、b);xB-solve (A);B,2.5.4 矩阵的运算,8求矩阵的特征值与特征向量函数eigen(Sm)是求对称矩阵Sm的特征值与特征向量,其命令形式为ev-eigen(Sm)则ev存放着对称矩阵Sm特征值和特征向量,是由列表形式给出的(有关列表的概念见2.6节),其中ev$values是Sm的特征值构成的向量,ev$vectors是Sm的特征向量构成的矩阵,如Sm-crossprod(A,A)ev-eigen(Sm);ev,2.5.5 与矩阵(数组)运算有关的函数,1取矩阵的维数函数dim (A)得到矩阵A的维数,函数nrow(A)得到矩阵A的行数,函数ncol(A)得到矩阵A的列数,如

30、A-matrix(1:6,nrow=2);Adim (A)nrow (A)ncol(A),2.5.5 与矩阵(数组)运算有关的函数,2矩阵的合并 函数cbind()把其自变量横向拼成一个大矩阵,rbind()把其自变量纵向拼成一个大矩阵,cbind()的自变量是矩阵或看作列向量的向量时,自变量的高度应该相等,rbind()的自变量是矩阵或看作行向量的向量时,自变量的宽度应该相等,如果参与合并的自变量比其变量短,则循环补足后合并如 x1-rbind(c(1,2),c(3,4);x1x2-10+x1x3-cbind(x1,x2);x3x4-rbind(x1,x2);x4cbind(1,x1),2.

31、5.5 与矩阵(数组)运算有关的函数,3矩阵的拉直设A是一个矩阵,则函数as.vector(A)就可以将矩阵转化为向量,如A-matrix(1:6,nrow=2) ; Aas.vector(A)4数组的维名字数组可以有一个属性dimnames保存各维的各个下标的名字,缺省时为NULL.如X-matrix(1:6, ncol=2,dimnames=list(c(lone,two,three), c(First,Second),byrow=T);X,2.5.5 与矩阵(数组)运算有关的函数,也可以先定义矩阵x然后再为dimnames(X)赋值,例如,X-matrix(1:6,ncol=2,byro

32、w=T)dimnames(X)-list(c(one,two,three),c(First,Second)对于矩阵,还可以使用属性rownames和colnames来访问行名与列名,例如,X-matrix(1:6,ncol=2,byrow=T)colnames(X)-c(First,Second)rownames(X)-c(one,two,three),2.5.5 与矩阵(数组)运算有关的函数,5数组的广义转置可以用aperm(A,perm)函数把数组A的各维按perm中指定的新次序重新排列,例如,A-array(1:24,dim=c(2,3,4)B-aperm(A, c(2,3,1)结果B把

33、A的第2维移到了第1维,A的第3维移到了第2维,A的第1维移到了第三维,这时有Bi,j,k=Aj,k,i对于矩阵A,aperm(A,c(2,1)恰好是矩阵转置,即t(A),2.5.5 与矩阵(数组)运算有关的函数,6apply函数对于向量,可以用sum、mean等函数对其进行计算,对于数组(矩阵),如果想对其一维(或若干维)进行某种计算,可用apply函数,其一般形式为apply(A, MARGIN, FUN, .)其中A为一个数组,MARGIN是固定哪些维不变, FUN是用来计算的函数,如A-matrix(1:6,nrow=2); Aapply(A,1,sum)apply(A,2,mean)

34、,2.6 列表与数据框,1列表的构造列表是一种特别的对象集合,它的元素也由序号(下标)区分,但是各元素的类型可以是任意对象,不同元素不必是同一类型,元素本身允许是其它复杂数据类型,比如,列表的一个元素也允许是列表,下面是如何构造列表的例子lst-list(name=c(Fred,wife,Mary),no.children=3,child.ages=c(4,7,9)列表元素总可以用“列表名下标”的格式引用,例如,lst2lst32,2.6 列表与数据框,但是,列表不同于向量,我们每次只能引用一个元素,如lst1:2的用法是不允许的注意:“列表名下标”或“列表名下标范围”的用法也是合法的,但其意

35、义与用两重括号的记法完全不同,两重记号取出列表的一个元素,结果与该元素类型相同,如果使用一重括号,则结果是列表的一个子列表(结果类型仍为列表)在定义列表时如果指定了元素的名字(如lst中的name,wife,nochildren,child. ages),则引用列表元素还可以用它的名字作为下标,格式为“列表名元素名,如lstnamelstchild.ages,2.6 列表与数据框,另一种格式是“列表名$元素名”,如lst$namelst$child.ages构造列表的一般格式为lst-list(name_l=object_l, , name_m=object_m)其中name是列表元素的名称,

36、 object是列表元素的对象,2.6 列表与数据框,2列表的修改列表的元素可以修改,只要把元素引用赋值即可,如将Fred改成John.lst$name- John如果需要增加一项家庭收入,夫妻的收入分别是1980和1600,则输入lst$income-c(1980, 1600)如果要删除列表的某一项,则将该项赋空值(NULL)几个列表可以用连接函数c()连接起来,结果仍为一个列表,其元素为各自变量的列表元素,如list.ABC-c(list.A, list.B, list.C),2.6 列表与数据框,3返回值为列表的函数在R中,有许多函数的返回值是列表,如求特征值特征向量的函数eigen()

37、,奇异值分解函数svd()和最小二乘函数数lsfit()等,2.6.2 数据框(data.frame),数据框是R的一种数据结构,它通常是矩阵形式的数据,但矩阵各列可以是不同类型的,数据框每列是一个变量,每行是一个观测但是,数据框有更一般的走义,它是一种特殊的列表对象,有一个值为data.frame的class属性,各列表成员必须是向量(数值型、字符型、逻辑型)、因子、数值型矩、列表,或其它数据框,向量、因子成员为数据框提供一个变量,如果向量非数值型会被强制转换为因子,而矩阵、列表、数据框这样的成员为新数据框提供了和其列数、成员数、变量数相同个数的变量,作为数据框变量的向量、因子或矩阵必须具有

38、相同的长度(行数),2.6.2 数据框(data.frame),尽管如此,一般还是可以把数据框看作是一种推广了的矩阵,它可以用矩阵形式显示,可以用对矩阵的下标引用方法来引用其元素或子集1数据框的生成数据框可以用data.frame()函数生成,其用法与list()函数相同,各自变量变成数据框的成分,自变量可以命名,成为变量名,例如,2.6.2 数据框(data.frame),df-data.frame(Name=c(Alice,Becka,James,Jeffrey,John),Sex=c(F,F,M,M,M),Age=c(13,13,12,13,12),Height=c(56.5,65.3,

39、57.3,62.5,59.0),Weight=c(84.0,98.0,83.0,84.0,99.5);df,2.6.2 数据框(data.frame),如果一个列表的各个成分满足数据框成分的要求,它可以用as.data.frame()函数强制转换为数据框,比如,lst-list(Name=c(Alice,Becka,James,Jeffrey,John),Sex=c(F,F,M,M,M),Age=c(13,13,12,13,12),Height=c(56.5,65.3,57.3,62.5,59.0),Weight=c(84.0,98.0,83.0,84.0,99.5);lst#则as.data

40、.frame(lst)是与df相同的数据框as.data.frame(lst),2.6.2 数据框(data.frame),一个矩阵可以用data.frame()转换为一个数据框,如果它原来有列名则其列名被作为数据框的变量名;否则系统自动为矩阵的各列起一个变量名,如X-array(1:6,c(2,3)data.frame(X)2数据框的引用引用数据框元素的方法与引用矩阵元素的方法相同,可以使用下标或下标向量,也可以使用名字或名字向量,如df1:2,3:5,2.6.2 数据框(data.frame),数据框的各变量也可以用按列表引用(即用双括号或$符号引用)如dfHeightdf$Weight数

41、据框的变量名由属性names定义,此属性一定是非空的,数据框的各行也可以定义名字,可以用rownames属性定义,如names(df)rownames(df)-c(one,two,three,four,five)df,75,可编辑,2.6.2 数据框(data.frame),3attach()函数数据框的主要用途是保存统计建模的数据R的统计建模功能都需要以数据框为输入数据,我们也可以把数据框当成一种矩阵来处理,在使用数据框的变量时可以用“数据框名$变量名”的记法,但是,这样使用较麻烦,R提供了attach()函数可以把数据框中的变量“连接”到内存中,这样便于数据框数据的调用,例如,attach

42、(df)r-Height/Weight;r,2.6.2 数据框(data.frame),后一语句将在当前工作空间建立一个新变量r,它不会自动进入!要把新变量赋值到数据框中,可以用df$r一Height/Weight这样的格式,为了取消连接,只要调用detach()(无参数即可)attach()除了可以连接数据框,也可以连接列表,2.6.3列表与数据框的编辑,如果需要对列表或数据框中的数据进行编辑,也可调用函数edit()进行编辑、修改,其命令格式为dfnew-edit (df)其中xold是原列表或数据框图, xnew是修改后的列表或数据框,注意:原数据xold并没有改动,改动的数据存放在xn

43、ew中,函数edit()也可以对向量,数组或矩阵类型的数据进行修改或编辑.,2.7读、写数据文件,在应用统计学中,数据量一般是比较大的,变量也很多,如果用上述方法来建立数据集,是不可取的,上述方法适用于少量数据、少量变量的分析,对于大量数据和变量,一般应在其他软件中输入(或数据来源是其他软件的输出结果),再读到R中处理 R软件有多种读数据文件的方法。另外,所有的计算结果也不应只在屏幕上输出,应当保存在文件中,以备使用。,2.7.1 读纯文本文件,读纯文本文件有两个函数,一个是read.table()函数,另一个是scan()函数1read.table()函数read.table()函数是读表格

44、形式的文件,若“住宅”数据已经输入一个纯文本文件”houses.data”中,其格式如下:,其中第一行为变量名,第一列为记录序号,2.7.1 读纯文本文件,利用read.table()函数可读入数据,如rt-read.table(houses.data)此时变量rt是一个数据框,其形式与纯文本文件“houses.data”格式相同,我们对它进行测试,得到is.data.frame (rt),2.7.1 读纯文本文件,如果数据文件中没有第一列记录序号,如,则相应的命令改为rt-read.table(houses2.data, header=TRUE)在rt会自动加上记录序号,2.7.1 读纯文本

45、文件,read.table函数的格式:read.table(file, header = FALSE, sep = , quote = , dec = ., row.names, col.names, as.is = !stringsAsFactors, na.strings = NA, colClasses = NA, nrows = -1, skip = 0, check.names = TRUE, fill = !blank.lines.skip, strip.white = FALSE, blank.lines.skip = TRUE, comment.char = #, allowE

46、scapes = FALSE, flush = FALSE, stringsAsFactors = default.stringsAsFactors(), fileEncoding = , encoding = unknown),2.7.1 读纯文本文件,2scan()函数scan()函数可以直接读纯文本文件数据,例如,有15名学生的体重数据已经输入一个纯文本文件weight.data中,其格式如下,则w-scan(weight.data)将文件中的15个数据读入,并赋给向量w,2.7.1 读纯文本文件,假设数据中有不同的属性,如下面,是100名学生的身高和体重的数据,放在纯文本数据文件”h_

47、w.data”,其中第1、3、5、7、9列是身高(cm),第2、4、6、8、10列是体重(kg),则inp一scan(h_w.data,list(height=0,weight=0)将数据读入,并以列表的方式赋给变量inp.,2.7.1 读纯文本文件,可以将由scan()读入的数据存放成矩阵形式,如果将“weight.data”中的体重数据放在一个3行5列的矩阵中,而且数据按行放置,其命令格式为X-matrix(scan(weight.data, 0),nrow=3, ncol=5, byrow=TRUE),2.7.1 读纯文本文件,scan(file = , what = double(),

48、 nmax = -1, n = -1, sep = , quote = if(identical(sep, n) else , dec = ., skip = 0, nlines = 0, na.strings = NA, flush = FALSE, fill = FALSE, strip.white = FALSE, quiet = FALSE, blank.lines.skip = TRUE, multi.line = TRUE, comment.char = , allowEscapes = FALSE, fileEncoding = , encoding = unknown),2.7

49、.2 读其它格式的数据文件,R软件除了可以读纯文本文件外,还可以读其他统计软件格式的数据,如Minitab、 S-PLUS、 SAS、 SPSS等,要读入其他格式数据库,必须先调入”foreign”模块,它不属于R的内在模块,需要在使用前调入,调入的方法很简便,只需键入命令:library(foreign)或用2.1.3节介绍的载入程序包调入。,2.7.2 读其它格式的数据文件,已知数据由表2.2所示,分别存成SPSS数据文件(”educ_scoressav)、SAS数据文件(educ_scores .xpt)、S-PLUS数据文件(educ_scores)和Stata数据文件(educ_sc

50、ores.dta).读SPSS文件的格式是:rs-read.spss(educ_scores.sav)其变量rs是一个列表,如果打算形成数据框,则命令格式为rs-read.spss(educ_scores.sav,to.data.frame=TRUE),2.7.2 读其它格式的数据文件,读SAS文件的格式是:rx-read.xport(educ_scores.xpt)其变量rx读S-PLUS文件的格式是:rs-read.S(educ_scores)其变量rs是一个数据框。读Stata文件的格式是:rd-read.dta(educ_scores.dta)其变量rd是一个数据框。是一个数据框。,2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号