《因子与列表》PPT课件.ppt

上传人:小飞机 文档编号:5483174 上传时间:2023-07-11 格式:PPT 页数:37 大小:556.50KB
返回 下载 相关 举报
《因子与列表》PPT课件.ppt_第1页
第1页 / 共37页
《因子与列表》PPT课件.ppt_第2页
第2页 / 共37页
《因子与列表》PPT课件.ppt_第3页
第3页 / 共37页
《因子与列表》PPT课件.ppt_第4页
第4页 / 共37页
《因子与列表》PPT课件.ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《《因子与列表》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《因子与列表》PPT课件.ppt(37页珍藏版)》请在三一办公上搜索。

1、实验内容,1、数据表示方法2、应用实例3、实验作业,学习R语言中离散变量、混合数据的表示方法,实验目的,因子、列表、数据框,因子(factor)和有序因子,统计中的变量重要类别:区间变量和名义变量、有序变量。区间变量取连续的数值,可以进行求和、平均等运算。名义变量和有序变量取离散值,既可用数值代表也可用字符型值,其具体数值没有数量意义,不能用于加减乘除计算而只能用来分类或者计数。名义变量比如性别、省份、职业,有序变量比如班级名次、质量等级。因为离散变量有各种不同表示方法,在R中为统一起见使用因子(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)的元素值集合。ordered取真值时表示因子水平是有次序的(按编码次序)。可以用is.factor()检验对象是否因子,用as.factor()把一个向量转换成一个因子。,x y factor(x,order=T)1 1 3 2 2Levels:1 factor(x,label=c(red,black,white)1 red black white whiteLevels:red black white factor(x,label=c(red,black,white),order=T)1 red black white whiteLevels:red factor(x,exclud

4、e=3,order=T)1 1 2 Levels:1 2,xy=factor(x,levels=sort(unique(x),decreasing=T),labels=c(男,女),order=F)y1 男 女 男 男 女 Levels:男 女,x y=factor(x,levels=c(1,0),labels=c(男,女),order=F)y1 男 女 男 男 女 Levels:男 女,因子的基本统计是频数统计,用函数table()来计数。例如,sex=factor(c(男,女,男,男,女)res.tab res.tab 1 男 女 3 2 表示男性3人,女性2人。table()的结果是一个

5、带元素名的向量,元素名为因子水平,元素值为该水平的出现频数。,可以用两个或多个因子进行交叉分类。比如,性别(sex)和职业(job)交叉分组可以用table(sex,job)来统计每一交叉类的频数,结果为一个矩阵,矩阵带有行名和列名,分别为两个因子的各水平名。job=factor(c(teacher,worker,worker,worker,teacher);sex=factor(c(男,女,男,男,女);table(sex,job);jobsex teacher worker 男 1 2 女 1 1,因子可以用来作为另外的同长度变量的分类变量。比如,假设上面的sex是5个学生的性别,而 h

6、tapply(h,sex,mean)#求按性别分类的身高平均值这样用一个等长的因子向量对一个数值向量分组的办法叫做不规则数组(ragged array)。后面我们还可以看到更多的因子的应用。,因子还可以用gl()函数来产生,其用法为:gl(n,k,length=n*k,labels=1:n,ordered=FALSE)n是水平数;k为重复的次数;length是结果的长度;labels是一个n维向量,表示因子的水平;ordered是逻辑变量,表示是否为有序因子,默认值为FALSE。gl(3,5)1 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels:1 2 3 gl(3,1

7、,9)1 1 2 3 1 2 3 1 2 3 Levels:1 2 3gl(3,1,8,labels=c(red,blue,white)1 red blue white red blue white red blue Levels:red blue white,列表(list)定义,列表是一种特别的对象集合,它的元素也由序号(下标)区分,但是各元素的类型可以是任意对象,不同元素不必是同一类型。元素本身允许是其它复杂数据类型,比如,列表的一个元素也允许是列表。列表元素用“列表名下标”的格式引用。但是,列表不同于向量,我们每次只能引用一个元素,如rec1:2的用法是不允许的。注意:“列表名下标”或

8、“列表名下标范围”的用法也是合法的,但其意义与用两重括号的记法完全不同,两重记号取出列表的一个元素,结果与该元素类型相同,如果使用一重括号,则结果是列表的一个子列表(结果类型仍为列表)。,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$scores 1 85 76 90 rec3 1 85 76 90 rec31:21 85 76 mode(rec1)1 list mod

9、e(rec1)1 character,在定义列表时如果指定了元素的名字(如rec中的name,age,scores),则引用列表元素还可以用它的名字作为下标,格式为“列表名元素名”,如:recage 1 30 另一种格式是“列表名$元素名”,如:rec$age 1 30 其中“元素名”可以简写到与其它元素名能够区分的最短程度,比如“rec$s”可以代表“rec$score”。这种写法方便了交互运行,编写程序时一般不用简写,以免降低程序的可读性。,使用元素名的引用方法可以让我们不必记住某一个下标代表哪一个元素,而直接用易记的元素名来引用元素。定义列表使用list()函数,每一个自变量变成列表的一

10、个元素,自变量可以用“名字值”的方式给出,即给出列表元素名。自变量的值被复制到列表元素中,自变量如果是变量并不会与该列表元素建立关系,修改列表,列表的元素可以修改,只要把元素引用赋值即可。如:rec$age rec$age rec$sex rec6 rec,$name 1 李明$age 1 30$scores 1 85 76 90$sex 1 男 5 NULL 6 1 161,第五号元素因为没有定义所有其值是“NULL”,这是空对象的记号。如果rec是一个向量,则其空元素为“NA”,这是缺失值的记号。从这里我们也可以体会“NULL”与“NA”的区别。几个列表可以用连接函数c()连接起来,结果仍

11、为一个列表,其元素为各自变量的列表元素。如:list.ABC rec1=list(name=“李雷,age=30,scores=c(76,90)rec2=list(name=“韩美美”,age=28,scores=c(20,25)rec3=list(name=“Lucy”,age=28,scores=c(30,50)rec4=list(name=“Lily”,age=29,scores=c(44,66)rec.all-c(rec1,rec2,rec3,rec4),$name1 李雷$age1 30$scores1 76 90$name1 韩美美$age1 28$scores1 20 25$na

12、me1 Lucy$age1 28$scores1 30 50$name1 Lily$age1 29$scores1 44 66,rec.all$name1“李雷”rec.allname1 李雷“rec.allname$name1 李雷rec.all4$name1 韩美美rec.all41“韩美美”,数据框(data.frame),数据框是R的一种数据结构。它通常是矩阵形式的数据,但矩阵各列可以是不同类型的。数据框每列是一个变量,每行是一个观测。数据框有更一般的定义。它是一种特殊的列表对象各列表成员必须是向量(数值型、字符型、逻辑型)、因子、数值型矩阵、列表,或其它数据框。向量、因子成员为数据框

13、提供一个变量,如果向量非数值型则会被强制转换为因子,而矩阵、列表、数据框这样的成员为新数据框提供了和其列数、成员数、变量数相同个数的变量。作为数据框变量的向量、因子或矩阵必须具有相同的长度(行数)。尽管如此,我们一般还是可以把数据框看作是一种推广了的矩阵,它可以用矩阵形式显示,可以用对矩阵的下标引用方法来引用其元素或子集。,数据框生成,数据框可以用data.frame()函数生成,其用法与list()函数相同,各自变量变成数据框的成分,自变量可以命名,成为变量名。例如:d=data.frame(name=c(赵,钱,孙,李,王),age=c(20,21,22,21,20),height=c(1

14、70,171,175,165,181),gender=c(男,女,男,女,男)d,d name age height gender 1 赵 20 170 男 2 钱 21 171 女 3 孙 22 175 男 4 李 21 165 女 5 王 20 181 男 d1 name 1 赵 2 钱 3 孙 4 李 5 王,d1 1 赵 钱 孙 李 王 Levels:李 钱 孙 王 赵#可见,d里的非数值向量已经变成因子了 d22:3 1 21 22,如果一个列表的各个成分满足数据框成分的要求,它可以用as.data.frame()函数强制转换为数据框。比如,上面的d如果先用list()函数定义成了一

15、个列表,就可以强制成为一个数据框。d1 d1-as.data.frame(d1)一个矩阵可以用data.frame()转换为一个数据框,如果它原来有列名则其列名被作为数据框的变量名,否则系统自动为矩阵的各列起一个变量名(如X1,X2)。,数据框引用,引用数据框元素的方法与引用矩阵元素的方法相同,可以使用下标或下标向量,也可以使用名字或名字向量。如d1:2,2:3(第一二行的第二三列对应的元素)。数据框的各变量也可以用按列表引用(即用双括号 或$符号引用)。数据框的变量名由属性names定义。数据框的各行也可以定义名字,可以用rownames属性定义。如:names(d)1 name age h

16、eight gender rownames(d)1 1 2 3 4 5,table(d4)1 男 女 3 2 table(d4)1 男 女 3 2 tapply(d3,d4,mean)1 男 女 175.3333 168.0000 d3/d2 1 8.500000 8.142857 7.954545 7.857143 9.050000,attach()函数,数据框的主要用途是保存统计建模需要的数据。R的统计建模功能都需要以数据框为输入数据。我们也可以把数据框当成一种矩阵来处理。在使用数据框的变量时可以用“数据框名$变量名”的记法。但是,这样使用较麻烦,R提供了attach()函数可以把数据框“

17、连接”入当前的名字空间。例如,attach(d)r d$r d为了取消连接,只要调用detach()(无参数即可)。,输入输出,在R交互运行时要显示某一个对象的值只要键入其名字即可 这实际上是调用了print()函数,即print(x)。在非交互运行(程序)中应使用print()来输出。print()函数可以带一个digits=参数指定每个数输出的有效数字位数,可以带一个quote=参数指定字符串输出时是否带两边的撇号,可以带一个print.gap=参数指定矩阵或数组输出时列之间的间距。print(ABC,quote=F);1 ABC print(ABC,quote=T);1 ABCprint

18、()函数是一个通用函数,即它对不同的自变量有不同的反应。对各种特殊对象如数组、模型结果等都可以规定print的输出格式。,cat()函数也用来输出,但它可以把多个参数连接起来再输出(具有paste()的功能)。例如:i=1;cat(i=,1,n)注意使用cat()时要自己加上换行符“n”。它把各项转换成字符串,中间隔以空格连接起来,然后显示。如果要使用自定义的分隔符,可以用sep=参数,例如:cat(c(AB,C),c(E,F),n,sep=)1ABCEF cat()还可以指定一个参数file=给一个文件名,可以把结果写到指定的文件中,如:cat(i=,1,n,file=c:/work/res

19、ult.txt),如果指定的文件已经存在则原来内容被覆盖。加上一个append=TRUE参数可以不覆盖原文件而是在文件末尾附加,这很适用于运行中的结果记录。R的输出缺省显示在交互窗口。可以用sink()函数指定一个文件以把后续的输出转向到这个文件,并可用append参数指定是否要在文件末尾附加:sink(“E:/work/result.txt,append=TRUE)ls()sink()调用无参数的sink()把输出恢复到交互窗口。,读数据文件,读入纯的文本文件用read.table()或scan()read.table(file,header=F,sep=,row.names,col.nam

20、es,skip=0)其中file是读取的文件名;header表示第一行是否作为变量名,默认值是FALSE;sep是数据分隔符,默认是空格,可以根据实际的文档定义分隔符;row.names和col.names分别定义了行和列的名字,可以缺省;skip表示跳过的行数,默认是0;其他还有很多可设置的参数,详见帮助文件。,forbes is.data.frame(forbes);1 TRUE forbes,scan()函数的基本用法若是直接从命令行输入数据 x x 1 1 2 2 若一个纯的文本文档,已经有一些数据,如15个学生的体重数据的文本文档weight.txt 75.0 64.0 47.4 6

21、6.9 62.2 62.2 58.7 63.5 66.6 64.0 57.0 69.0 56.9 50.0 72.0 w-scan(weight.txt)表示将这15个数据读入,并赋给向量w。,若数据有不同的属性,例如在height and weight.txt文档中,奇数列是height,偶数列是weight h_w h_w$height 1 172.4 169.3 169.3 171.4 166.5 171.4 168.2 165.1 168.8 167.8 165.8 167.8 13 164.4 169.9 164.9$weight 1 75.0 54.8 64.0 64.8 47.4

22、 62.2 66.9 52.0 62.2 65.0 62.2 65.0 58.7 57.5 15 63.5,读取其他格式的文件读取SPSS数据文件 read.spss(file.sav,to.data.frame=TRUE)读取SAS数据文件 read.xport(file.xpt)#读入以后是个数据框读取excel数据文件R里面没有提供直接读取excel数据文件的命令,Microsoft的文件背后究竟是个什么谁也不知道。但可以调用RODBC这个package,我们不推荐。具体可以采用下面两种常用的方法:1.将excel的内容复制粘贴到txt文档,用read.table()读取;2.另存为cs

23、v格式,用read.csv()读取,写数据文件,write()函数可以用来写向量、矩阵数据,基本格式为:write(x,file=data,append=FALSE)其中x是写出的数据;file表示文件名,默认文件名为data;append=TRUE表示在原来的文件上添加数据,默认值是FALSE,表示写入一个新文件;其他可设置的参数,详见帮助文件。,若要写入的数据时列表或者数据框,一般用write.table()或write.csv()函数写纯文本格式,或者csv格式的excel文件:write.table(x,file=file name.txt,sep=,append=FALSE,row.

24、names=TRUE,col.names=TRUE);其中x是写出的数据;file表示文件名;sep是数据之间的分隔符,默认用空格;row.names和col.names分别是行和列的名字;其他还有很多可设置的参数,详见帮助文件。write.csv()的用法类似,data write.table(data,New comer.txt,sep=t);write.csv(data,New comer.csv),实验作业,1、自建一个数据框,内容要求包含不同类型的、可分类的数据,例如有数值型的,有字符型的,可以按性别或者职业分类的。计算不同类别下,数值型数据的均值、方差等统计量,把这些变量组合成一个列表。2.把语句x-runif(100)所生成的向量保存到一个文本文件中,数据项分别用空格和换行分隔。然后从此文件中读入数据到向量y中。,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号