查看原文
其他

R笔记:因子

vacleon 统计浆糊 2023-09-26

变量可以简单地分为连续变量和分类变量(类别变量),分类变量又可以分为名义变量(包括二分类变量和无序多分类变量)和等级变量(有序多分类变量)。分类变量在R中称为因子。因子在R中很重要,可以影响到数据的分析方式。

函数factor()可以将向量编码成因子,对分类变量的每一个水平(原始值)赋值为一个整数,并以整数向量的形式储存起来。

factor {base}: The function factor is used to encode a vector as a factor (the terms "category" and "enumerated type" are also used for factors). If argument ordered is TRUE, the factor levels are assumed to be ordered. For compatibility with S there is also a function ordered.

is.factoris.orderedas.factor and as.ordered are the membership and coercion functions for these classes.

factor(x = character(), levels, labels = levels,exclude = NA, ordered = is.ordered(x), nmax = NA)
ordered(x, ...)
解释一下比较重要的几个参数。ordered:logical flag to determine if the levels should be regarded as ordered (in the order given)默认FALSE,构建名义变量;ordered=TRUE时将会构建有序变量,函数会根据字母顺序(字符变量)或数字顺序(数值变量)赋值因子的水平,也可以通过指定levels选项来覆盖默认排序。对于数值型变量,labels可以赋予数值实际意义的标签。需要注意的是,在数据中出现但在levels没有列举的值将会按缺失值处理。
levels代表原始类别名称(因子格水平的名称),levels选项中原始类别名称的从左到右的排列顺序对应赋值由小到大,如果levels缺失,则默认由字母顺序(字符变量)或数字顺序(数值变量)赋值因子的各水平。factor函数类似于SPSS中通过values给原始类别名称赋值,lables相当于对类别名称进行重命名,类似于SPSS中label。

创建因子后,针对该因子的任何分析都会将其作为创建的名义型(ordered=FALSE)或者有序型(ordered=TRUE)变量对待,并自动选择合适的统计方法。

其他参数可参见函数介绍文件。
相关的其他函数如下:
##判断:返回TRUE或FALSE

is.factor(x)

is.ordered(x)

##转换:将其参数转换为因子

as.factor(x) #as.factor coerces its argument to a factor. It is an abbreviated (sometimes faster) form of factor.

as.ordered(x) 

##modifies a factor by turning NA into an extra level (so that NA values are counted in tables, for instance)

addNA(x, ifany = FALSE) 

示例:<<R笔记:多个独立样本的非参数检验及其多重比较>>中的示例2数据。采用软件:R-4.0.3-win

在此示例中,组别为无序多分类变量,结局为有序多分类变量,为了更好的演示不同类型的变量是如何编码成因子的,组别(drug、group)和结局(effect、eft)我们都用字符型和数值型两种变量来表示。

数据导入

library(readxl)

data<-read_excel("D:/Temp/NPtdata.xlsx",3

data

变量编码为因子

F1<-factor(data$drug) #将data表中的字符型变量drug编码成名义变量,并命名为F1,"1%selenium"、 "10%So"、"2.5%selenium"将会被分别赋值为1、2、3

F12<-as.factor(data$drug) #将data表中的变量drug转换成因子,并命名为F12。跟factor函数的结果是一致的
F2<-factor(data$group) #将data表中的数值型变量group编码成名义变量,并命名为F2,水平0、1、2将会被分别赋值为1、2、3
F22<-factor(data$group,levels=c(0,1,2),labels=c("10%So", "1%selenium", "2.5%selenium")) #将data表中的数值型变量group编码成名义变量,并命名为F22,水平0、1、2将会被分别赋予标签值为10%So、1%selenium、2.5%selenium
F3<-factor(data$effect, ordered=TRUE)  #将data表中的字符型变量effect编码成有序变量,并命名为F3,cure、aprt、eft、ineft将会被分别赋值为2、1、3、4【Levels(按字母顺序排序): aprt < cure < eft < ineft】
F32<-factor(data$effect, levels=c("cure", "aprt", "eft", "ineft"),ordered=TRUE) #将data表中的字符型变量effect编码成有序变量,并命名为F32,cure、aprt、eft、ineft将会被分别赋值为1、2、3、4【按levels指定顺序: cure < aprt < eft < ineft】
F4<-factor(data$eft,levels=c(0,1,2,3),labels=c("ineft","eft","aprt", "cure"),ordered=TRUE) #将data表中的数值型变量eft编码成有序变量,并命名为F4,原水平值0、1、2、3会分别赋值1、2、3、4,并赋予标签值ineft、eft、aprt、cure

… E N D …

原创不易,欢迎“在看”

关注“一统浆糊”

获取更多信息

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存