资源描述:
《R-4因子、列表、数据框及输入输出》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第四讲R的数据结构(二)因子、列表、数据框目的:学习R中离散变量、混合数据的表示方法内容:数据表示方法实例作业因子(factor)和有序因子统计中的变量重要类别连续:区间变量离散:名义变量、有序变量区间变量取连续的数值,可以求和、算平均等。名义变量和有序变量取离散值,既可用数值表示也可取字符型值,其具体数值没有数量意义,不能用于加减乘除计算而只能用来分类或者计数。名义变量比如性别、省份、职业,有序变量比如班级名次、质量等级等。因为离散变量有各种不同表示方法,在R中为统一起见使用因子(factor)来表示这种分类变量。还提供了有序因子(orderedfactor)来表示有序变量。因子
2、是一种特殊的字符型向量,其中每一个元素取一组离散值中的一个,而因子对象有一个特殊属性levels表示这组离散值(用字符串表示)。例如:>x<-c("男","女","男","男","女")>y<-factor(x)>y[1]男女男男女Levels:男女函数factor()用来把一个向量编码成为一个因子。一般形式为:factor(x,levels=sort(unique(x),na.last=TRUE),labels,exclude=NA,ordered=FALSE)可以自行指定各离散取值水平(levels),不指定时由x的不同值来求得。labels可以用来指定各水平的标签,不指定时用
3、各离散取值的对应字符串。exclude参数用来指定要转换为缺失值(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)>y
4、[1]男女男男女Levels:男女>x<-c(1,0,1,1,0,2)>y<-factor(x,levels=c(1,0),labels=c("男","女"),exclude=NA,order=F)>y[1]男女男男女Levels:男女因子的基本统计是频数统计,用函数table()来计数。例如,>sex<-factor(c("男","女","男","男","女"))>res.tab<-table(sex)>res.tab男女32表示男性3人,女性2人。table()的结果是一个带元素名的向量,元素名为因子水平,元素值为该水平出现的频数。R的结果除了可以显示外,本身都是R对象
5、(如这里的向量结果),可以很方便地进一步处理。可以用两个或多个因子进行交叉分类。比如,性别(sex)和职业(job)交叉分组可以用table(sex,job)来统计每一交叉类的频数,结果为一个矩阵,矩阵带有行名和列名,分别为两个因子的各水平名。因子可以用来作为另外的同长度变量的分类变量。比如,假设上面的sex是5个学生的性别,而>h<-c(165,170,168,172,159)是这5个学生的身高,则>table(h,sex)sexh男女1590116510168101700117210>tapply(h,sex,mean)#可以求按性别分类的身高平均值。男女168.3333164
6、.5000列表(list)定义列表是一种特别的对象集合,它的元素也由序号(下标)区分,但是各元素的类型可以是任意对象,不同元素不必是同一类型。元素本身允许是其它复杂数据类型,比如,列表的一个元素也允许是列表。列表元素用“列表名[[下标]]”的格式引用。但是,列表不同于向量,我们每次只能引用一个元素,如rec[[1:2]]的用法是不允许的。注意:“列表名[下标]”或“列表名[下标范围]”的用法也是合法的,但其意义与用两重括号的记法完全不同,两重记号取出列表的一个元素,结果与该元素类型相同,如果使用一重括号,则结果是列表的一个子列表(结果类型仍为列表)。>rec=list(name="
7、李明",age=30,scores=c(85,76,90))>rec$name[1]"李明"$age[1]30$scores[1]857690>rec[1]$name[1]"李明">rec[[1]][1]"李明">rec[2]$age[1]30>rec[[2]][1]30>rec[3]$scores[1]857690>rec[[3]][1]857690>rec[[3]][1:2][1]8576>mode(rec[1])[1]"list">mode(rec[[1]])[