R学习 第九篇:因子

您所在的位置:网站首页 因子数据是什么意思 R学习 第九篇:因子

R学习 第九篇:因子

2024-06-23 02:04| 来源: 网络整理| 查看: 265

因子(factor)是R语言中比较特殊的一个数据类型, 它是一个用于存储类别的类型,举个例子,从性别上,可以把人分为:男人和女人,从年龄上划分,又可以把人分为:未成年人(=18)。R把表示分类的数据称为因子,因子的行为有时像字符串,有时像整数。因子是一个向量,通常情况下,每个元素都是字符类型,也有其他数据类型的元素。因子具有因子水平(Levels),用于限制因子的元素的取值范围,R强制:因子水平是字符类型,因子的元素只能从因子水平中取值,这意味着,因子的每个元素要么是因子水平中的字符(或转换为其他数据类型),要么是缺失值,这是因子的约束,是语法上的规则。

一,创建因子

通常情况下,在创建数据框变量时,R隐式把数据类型为字符的列创建为因子,这是因为R会把文本类型默认为类别数据,并自动转换为因子。

例如,创建一个数据框变量,通过class()函数检查gender列的类,结果是因子类型,而不是字符向量:

heights class(heights$gender) [1] "factor"

还可以通过factor()函数创建因子,factor()函数的第一个参数必须是字符向量,通过levels参数显式设置因子水平,

factor(x = character(), levels, labels = levels, exclude = NA, ordered = is.ordered(x), nmax = NA)

参数注释:

x:是向量,通常是由少量唯一值的字符向量 levels:水平,字符类型,用于设置x可能包含的唯一值,默认值是x的所有唯一值。如果x不是字符向量,那么使用as.character(x)把x转换为字符向量,然后获取x向量的水平。x向量的取值跟levels有关。 labels:是水平的标签,字符类型,用于对水平添加标签,相当于对因子水平重命名; exclude:排除的字符 ordered:逻辑值,用于指定水平是否有序; nmax:水平的上限数量

例如,因子sex的值是向量c('f','m','f','f','m'),因子水平是c('f','m'):

> sex sex [1] f m f f m Levels: f m

二,因子水平

因子水平规定了因子取值的范围,每一个因子,都包含因子水平的信息,例如,打印gender列,可以看到因子的元素和水平:

> heights$gender [1] f m f Levels: f m

该因子中的每个值都是一个字符串,它们被限制为“f”、“m”和缺失值(NA)。如果把其他字符串添加到gender列中,R会抛出警告消息,并把错误赋值的元素设置为NA,例如:

> heights$gender[1] nlevels(heights$gender) [1] 2

2,因子水平的标签

使用factor函数创建因子,可以使用labels参数为每个因子水平添加标签,labels参数的字符顺序,要和levels参数的字符顺序保持一致,例如:

> sex=factor(c('f','m','f','f','m'),levels=c('f','m'),labels=c('female','male'),ordered=TRUE) > sex [1] female male female female male Levels: female < male

三,有序因子

通常情况下,因子一般是无序的,这可以通过is.ordered()函数来验证:

> is.ordered(sex) [1] FALSE

因子的顺序,实际上是指因子水平的顺序,有序因子的因子水平是有序的。在特殊情况下,有些因子的水平在语义上大于或小于其他水平,R支持按顺序排列的因子,使用ordered函数,或通过给factor函数传入order=TRUE参数,把无序因子转换为有序的因子。

1,通过ordered()函数把现有因子转换为有序因子

ordered()函数不能指定特定因子水平的顺序,通常情况下,因子中先出现的水平小于后出现的水平。

例如,通过ordered函数把sex因子转换为有序的因子:

> ordered(sex) [1] f m f f m Levels: f < m

2,创建有序的因子

通过factor函数创建有序因子,通过levels指定因子的顺序。

> sex sex [1] f m f f m Levels: f < m

3,按照指定的顺序转换现有的因子

因子的顺序,其实是因子水平的顺序,我们可以通过levels,使现有的因子按照指定的因子水平来排序。

例如,把heights数据库框的gender,按照指定的levels,转换成有序因子:

heights$gender as.integer(sex) [1] 1 2 1 1 2 七,把连续变量分割为类别

函数cut()能够把数值变量切成不同的块,然后返回一个因子

cut(x, breaks, labels = NULL)

参数注释:

x:数值变量 breaks:切割点向量 labels:每一个分组的标签

例如,把身高数据,按照指定的切割点向量分割:

cut(heights$height_cm,c(150,170,190)) [1] (150,170] (170,190] (150,170] Levels: (150,170] (170,190] 八,修改数据框中的因子

一般情况下,数据框中的字符类型的列会转换为因子类型,要修改因子类型,一般通过三步来完成:

mydata$Category


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3