Lecture4N因子、列表、数据框及输入输出.ppt
《Lecture4N因子、列表、数据框及输入输出.ppt》由会员分享,可在线阅读,更多相关《Lecture4N因子、列表、数据框及输入输出.ppt(44页珍藏版)》请在三一办公上搜索。
1、实验目的,实验内容,学习S语言中离散变量、混合数据的表示方法,1、数据表示方法2、应用实例3、实验作业,因子、列表、数据框,因子(factor)和有序因子,统计中的变量重要类别:区间变量和名义变量、有序变量。区间变量取连续的数值,可以进行求和、平均等运算。名义变量和有序变量取离散值,既可用数值表示也可取字符型值,其具体数值没有数量意义,不能用于加减乘除计算而只能用来分类或者计数。名义变量比如性别、省份、职业,有序变量比如班级名次、质量等级等。因为离散变量有各种不同表示方法,在S中为统一起见使用因子(factor)来表示这种分类变量。还提供了有序因子(ordered factor)来表示有序变量
2、。,因子是一种特殊的字符型向量,其中每一个元素取一组离散值中的一个,而因子对象有一个特殊属性levels表示这组离散值(用字符串表示)。例如:x y y 1 男 女 男 男 女 Levels:男 女,函数factor()用来把一个向量编码成为一个因子。一般形式为:factor(x,levels=sort(unique(x),na.last=TRUE),labels,exclude=NA,ordered=FALSE),可以自行指定各离散取值水平(levels),不指定时由x的不同值来求得。labels可以用来指定各水平的标签,不指定时用各离散取值的对应字符串。exclude参数用来指定要转换为缺
3、失值(NA)的元素值集合。如果指定了levels,则因子的第i个元素当它等于水平中第j个时元素值取“j”,如果它的值没有出现在levels中则对应因子元素值取NA。ordered取真值时表示因子水平是有次序的(按编码次序)。可以用is.factor()检验对象是否因子,用as.factor()把一个向量转换成一个因子。,x=c(1,0,1,1,0)y=factor(x,levels=sort(unique(x),decreasing=T),labels=c(男,女),exclude=NA,order=F)y1 男 女 男 男 女 Levels:男 女,x=c(1,0,1,1,0,2)y=fac
4、tor(x,levels=c(1,0),labels=c(男,女),exclude=NA,order=F)y1 男 女 男 男 女 Levels:男 女,因子的基本统计是频数统计,用函数table()来计数。例如,sex=factor(c(男,女,男,男,女)res.tab res.tab 男 女 3 2 表示男性3人,女性2人。table()的结果是一个带元素名的向 量,元素名为因子水平,元素值为该水平出现的频数。S的结果除了可以显示外,本身都是S对象(如这里的向量结果),可以很方便地进一步处理。可以用两个或多个因子进行交叉分类。比如,性别(sex)和职业(job)交叉分组可以用table(
5、sex,job)来统计每一交叉类的频数,结果为一个矩阵,矩阵带有行名和列名,分别为两个因子的各水平名。,因子可以用来作为另外的同长度变量的分类变量。比如,假设上面的sex是5个学生的性别,而 h tapply(h,sex,mean)可以求按性别分类的身高平均值。这样用一个等长的因子向量对一个数值向量分组的办法叫做不规则数组(ragged array)。后面我们还可以看到更多的因子的应用。,列表(list)定义,列表是一种特别的对象集合,它的元素也由序号(下标)区分,但是各元素的类型可以是任意对象,不同元素不必是同一类型。元素本身允许是其它复杂数据类型,比如,列表的一个元素也允许是列表。列表元素
6、用“列表名下标”的格式引用。但是,列表不同于向量,我们每次只能引用一个元素,如rec1:2的用法是不允许的。注意:“列表名下标”或“列表名下标范围”的用法也是合法的,但其意义与用两重括号的记法完全不同,两重记号取出列表的一个元素,结果与该元素类型相同,如果使用一重括号,则结果是列表的一个子列表(结果类型仍为列表)。,rec=list(name=李明,age=30,scores=c(85,76,90)rec$name 1 李明$age 1 30$scores 1 85 76 90,rec1$name 1 李明 rec1 1 李明 rec2$age 1 30 rec2 1 30,rec3$scor
7、es 1 85 76 90 rec3 1 85 76 90 rec31:21 85 76 mode(rec1)mode(rec1),在定义列表时如果指定了元素的名字(如rec中的name,age,scores),则引用列表元素还可以用它的名字作为下标,格式为“列表名元素名”,如:recage 1 30 另一种格式是“列表名$元素名”,如:rec$age 1 30 其中“元素名”可以简写到与其它元素名能够区分的最短程度,比如“rec$s”可以代表“rec$score”。这种写法方便了交互运行,编写程序时一般不用简写,以免降低程序的可读性。,使用元素名的引用方法可以让我们不必记住某一个下标代表那一
8、个元素,而直接用易记的元素名来引用元素。事实上,已知向量和矩阵都可以指定元素名、行名、列名。定义列表使用list()函数,每一个自变量变成列表的一个元素,自变量可以用“名字值”的方式给出,即给出列表元素名。自变量的值被复制到列表元素中,自变量如果是变量并不会与该列表元素建立关系(改变该列表元素不会改变自变量的值)。(例见后),修改列表,列表的元素可以修改,只要把元素引用赋值即可。如:rec$age rec$age rec$sex rec6 rec,rec$sex rec6 rec,$name 1 李明$age 1 30$scores 1 85 76 90$sex 1 男 5 NULL 6 1
9、161,sex rec1 rec1rec11=女rec1sex,第五号元素因为没有定义所有其值是“NULL”,这是空对象的记号。如果rec是一个向量,则其空元素为“NA”,这是缺失值的记号。从这里我们也可以体会“NULL”与“NA”的区别。几个列表可以用连接函数c()连接起来,结果仍为一个列表,其元素为各自变量的列表元素。如:list.ABC-c(list.A,list.B,list.C)(注意在S中句点是名字的合法部分,一般没有特殊意义。),几个返回列表的函数,列表的重要作用是把相关的若干数据保存在一个数据对象中,这样在编写函数时我们就可以返回这样一个包含多项输出的列表。因为函数的返回结果可
10、以完整地存放在一个列表中,我们可以继续对得到的结果进行分析,这是S比SAS灵活的一个地方。下面给出几个返回列表的例子。,一、特征值和特征向量函数eigen(x)对对称矩阵x计算其特征值和特征向量,返回结果为一个列表,列表的两个成员(元素)为values和vectors。例如:ev=eigen(1:3)%o%(1:3)ev$values 1 1.400000e+01 9.176554e-16-1.023391e-15$vectors,1,2,3 1,-0.2672612 0.6067775 0.7485937 2,-0.5345225 0.5530299-0.6390960 3,-0.80178
11、37-0.5709457 0.1765328特征向量按矩阵存放,每一列为一个特征向量。,二、奇异值分解及行列式svd()函数进行奇异值分解自学,三、最小二乘拟合与QR分解函数lsfit(x,y)返回最小二乘拟合的结果。最小二乘的模型为线性模型 lsfit(x,y)的第一个参数x为模型中的设计阵,第二个参数y为模型中的因变量y(可以是一个向量也可以是一个矩阵),返回一个列表,成员coefficients为上面模型的最小二乘系数,成员residuals为拟合残差,成员intercept用来指示是否有截距项,成员qr为设计阵 的QR分解,它本身又是一个列表。,三、最小二乘拟合与QR分解关于最小二乘拟
12、合还可参见ls.diag()函数(查看帮助)。函数qr(x)返回x的QR分解结果。矩阵X的QR分解为X=Q*R,Q为对角线元素都等于1的下三角阵,R为上三角阵。函数结果为一个列表,成员qr 为一个矩阵,其上三角部分(包括对角线)分解的R,其下三角部分(不包括对角线)为分解的Q。其它成员为一些辅助信息。,x=rbind(c(1,2,3),c(4,5,6),c(7,8,9)y=qr(x)y qr.R(y)qr.Q(y)qr.Q(y)%*%qr.R(y),x=rbind(c(1,2,3),c(4,5,6),c(7,8,9)y=qr(x)y$qr,1,2,31,-8.1240384-9.6011363
13、-1.107823e+012,0.4923660 0.9045340 1.809068e+003,0.8616404 0.9954736-2.220446e-16$rank1 2$qraux1 1.123091e+00 1.095039e+00 2.220446e-16$pivot1 1 2 3attr(,class)1 qr,qr.R(y),1,2,31,-8.124038-9.601136-1.107823e+012,0.000000 0.904534 1.809068e+003,0.000000 0.000000-2.220446e-16 qr.Q(y),1,2,31,-0.123091
14、5 0.9045340 0.40824832,-0.4923660 0.3015113-0.81649663,-0.8616404-0.3015113 0.4082483 qr.Q(y)%*%qr.R(y),1,2,31,1 2 32,4 5 63,7 8 9,数据框(data.frame),数据框是S中类似SAS数据集的一种数据结构。它通常是矩阵形式的数据,但矩阵各列可以是不同类型的。数据框每列是一个变量,每行是一个样品的观测值。数据框有更一般的定义。它是一种特殊的列表对象,有一个值为“data.frame”的class 属性,各列表成员必须是向量(数值型、字符型、逻辑型)、因子、数值型矩阵
15、、列表,或其它数据框。向量、因子成员为数据框提供一个变量,如果向量非数值型则会被强制转换为因子,而矩阵、列表、数据框这样的成员为新数据框提供了和其列数、成员数、变量数相同个数的变量。作为数据框变量的向量、因子或矩阵必须具有相同的长度(行数)。尽管如此,我们一般还是可以把数据框看作是一种推广了的矩阵,它可以用矩阵形式显示,可以用对矩阵的下标引用方法来引用其元素或子集。,数据框生成,数据框可以用data.frame()函数生成,其用法与list()函数相同,各自变量变成数据框的成分,自变量可以命名,成为变量名。例如:d=data.frame(name=c(赵,钱,孙,李,王),age=c(20,2
16、1,22,21,20),height=c(170,171,175,165,181),gender=c(男,女,男,女,男)d 如果一个列表的各个成分满足数据框成分的要求,它可以用as.data.frame()函数强制转换为数据框。比如,上面的d如果先用list()函数定义成了一个列表,就可以强制成为一个数据框。一个矩阵可以用data.frame()转换为一个数据框,如果它原来有列名则其列名被作为数据框的变量名,否则系统自动为矩阵的各列起一个变量名(如X1,X2)。,d name age height gender 1 赵 20 170 男 2 钱 21 171 女 3 孙 22 175 男 4
17、 李 21 165 女 5 王 20 181 男 d1 name 1 赵 2 钱 3 孙 4 李 5 王,d1 1 赵 钱 孙 李 王 Levels:李 钱 孙 王 赵 d22:3 1 21 22,数据框引用,引用数据框元素的方法与引用矩阵元素的方法相同,可以使用下标或下标向量,也可以使用名字或名字向量。如d1:2,2:3。数据框的各变量也可以用按列表引用(即用双括号 或$符号引用)。数据框的变量名由属性names定义,此属性一定是非空的。数据框的各行也可以定义名字,可以用rownames属性定义。如:names(d)1 name age height gender rownames(d)1
18、1 2 3 4 5,table(d4)男 女 3 2 table(d4)男 女 3 2 tapply(d3,d4,mean)男 女 175.3333 168.0000 tapply(d3,d4,mean)错误在tapply(d3,d4,mean):变元的长度必需相同 d3/d21 8.500000 8.142857 7.954545 7.857143 9.050000,attach()函数,数据框的主要用途是保存统计建模需要的数据。S的统计建模功能都需要以数据框为输入数据。我们也可以把数据框当成一种矩阵来处理。在使用数据框的变量时可以用“数据框名$变量名”的记法。但是,这样使用较麻烦,S提供了
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Lecture4N 因子 列表 数据 输入输出
链接地址:https://www.31ppt.com/p-6510876.html