R中的因素
在本教程中,我们将继续了解R编程中的因素。
我们在数据科学中经常执行的一项操作是根据我们建立的模型对变量进行估算。
有时我们需要估计股票或者房屋的价格,有时我们需要估计最快销售哪种颜色的汽车。
数据科学中的变量分为两类:连续变量和分类变量。
连续变量是那些可以采用包括浮点在内的数值的变量。
房屋或者股份的价格,诸如年龄,体重或者身高等可量化变量都是连续变量。
另一方面,分类变量采用一组固定值,可以使用一组标签来表示。
例如,婚姻状况,性别,车辆的颜色,个人的最高学历等。
分类变量使用R中的因子表示。
在R中创建因素
可以使用factor()函数创建因子。
factor(x=vector, levels, labels, is.ordered=TRUE/FALSE)
因子函数的第一个参数是您希望分解的值的向量x。
请注意,您不能使用矩阵创建因子。
X应该始终是字符串或者整数值的一维向量。
其次,您需要提供因子中所需级别的列表。
级别是因子中使用的唯一值的向量。
这是一个可选参数。
第三个参数是标签。
有时,当您将变量编码为整数向量时,需要指定什么整数代表什么标签。
您可以使用0和1来代表男性和女性,但是您需要使用这些标签来指定。
因此,基本上,这是查找因素的关键。
最后,您有一个布尔值自变量is.ordered。
有时,您可能希望保留所使用因素之间的顺序。
例如,您可以使用整数1到12编码加入月份,以表示从一月到十二月的月份。
在这些情况下,您需要将命令指定为TRUE。
现在让我们来看一些因素的例子。
#Encode the genders of people into a vector first #These might be extracted from a dataset usually. > genvector <- c("Male","Female","Female","Male","Male","Female") #Create a factor from this vector > genfact <- factor(genvector) > genfact [1] Male Female Female Male Male Female Levels: Female Male
请注意,此处是如何从矢量的唯一值自动获得级别的。
让我们尝试另一个示例,其中使用标签将"男性"和"女性"定义为0和1。
#Define a vector with 0 for Male and 1 for Female. > genvector2 <- c(0,1,1,0,0,1) #Assign labels Male and Female to 0 and 1 when creating a Factor. > genfact2 <-factor(genvector2,levels=c("0","1"),labels=c("Male","Female")) > genfact2 [1] Male Female Female Male Male Female Levels: Male Female
请注意,显示的是您定义的标签,而不是因子中定义的0和1。
R编程中的因素排序
让我们使用因子水平的排序来工作另一个示例。
让我们首先定义一个向量,表示8位员工的加入月份。
> moj <- c("Jan","Jun","May","Jan","Apr","Dec","Nov","Sep")
现在,编译器无法知道May会在Jun之前几个月出现。
因此,以下代码将引发FALSE。
> moj[2]>moj[3] [1] FALSE
要强加排序,我们需要先定义一个包含所有月份的向量。
> ordermonths <-c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")
现在,使用moj向量为我们的数据创建一个因子,将级别设置为ordermonths,并将有序参数设置为TRUE。
> factormoj <- factor(x=moj, levels=ordermonths, ordered=TRUE)
现在factormoj显示如下。
> factormoj [1] Jan Jun Jan Jan Apr Dec Nov Sep 12 Levels: Jan < Nov < Mar < Apr < Jan < Jun < May < Aug < Sep < Oct < ... < Dec
现在,编译器知道月份之间的顺序。
让我们检查一下是否知道五月份会在六月之前。
> factormoj[2]>factormoj[3] [1] TRUE
修改因素
就像我们对向量进行索引一样,可以使用索引分别为因子的每个元素分配一个值。
让我们根据本教程前面创建的基因因子修改值。
我们将继续使用以前的相同变量,以便使您更轻松地使用genfact。
> genfact [1] Male Female Female Male Male Female Levels: Female Male > genfact[1] [1] Male Levels: Female Male > genfact[1]<-"Female" > genfact [1] Female Female Female Male Male Female Levels: Female Male
为因素添加新的水平
要将新的水平添加到以前未定义的因子中,只需按以下方式修改水平向量即可。
让我们在现有的genfact变量上尝试一下。
> levels(genfact) <- c(levels(genfact),"Other") > genfact [1] Female Female Female Male Male Female Levels: Female Male Other
现在,您也可以将因子修改为新定义的级别"其他"。
> genfact[3] <- "Other" > genfact [1] Female Female Other Male Male Female Levels: Female Male Other