当前位置:K88软件开发文章中心编程全书编程全书02 → 文章内容

R语言中因子的创建与管理

减小字体 增大字体 作者:佚名  来源:翔宇亭IT乐园  发布时间:2019-1-3 3:02:16

:2017-10-10 14:05:43

因子在R语言中可以用来表示名义型变量或有序变量。

在统计学中,变量可以分为:区间变量,名义变量和有序变量。

区间变量即可以取连续值的变量,如体重,身高,温度等等。

名义变量一般表示类别,如性别,种族等等。

有序变量是有一定排序顺序的变量,如职称,年级等等。

在R语言中,名义变量和有序变量可以使用因子来表示。

1、因子的创建

在R语言中可以使用factor()函数和gl()函数来创建因子变量。

(1)使用factor()函数

函数factor()以一个整数向量的形式存储类别值,整数的取值范围是[1... k ](其中k 是名义型变量中唯一值的个数),同时一个由字符串(原始值)组成的内部向量将映射到这些整数上。

其语法格式为:

f<-factor(x=charactor(),levels,labels=levels,exclude = NA, ordered = is.ordered(x),namax = NA)

其中:

x 为创建因子的数据,是一个向量;levels:因子数据的水平,默认是x中不重复的值;labels:标识某水平的名称,与水平一一对应,以方便识别,默认取levels的值;exclude:从x中剔除的水平值,默认为NA值;ordered:逻辑值,因子水平是否有顺序(编码次序),若有取TRUE,否则取FALSE;nmax:水平个数的限制。

fc1<-factor(c(1,2,3,3,1,2,2,3,1,3,2,1))

fc2<-factor(rep(1:3,times=2),labels=c("A","B","C"))

grade<-c("Freshman","Sophomore","Junior","Senior")

fc3<-factor(grade,ordered=TRUE)  #对于字符型向量,因子的水平默认依字母顺序创建

fc4<-factor(grade,ordered=TRUE, levels=c("Freshman","Sophomore","Junior","Senior")) #指定levels,则按levels中的顺序定义数值

本部分执行情况如下图所示:

(2)使用gl()函数

gl()函数用于定义有规律的因子向量,其语法格式如下:

gl(n, k, length = n*k, labels = 1:n, ordered = FALSE)

其中参数的含义如下:

n: 正整数,表示因子的水平个数

k:正整数,表示每个水平重复的次数;

length: 正整数,表示因子向量的长度,默认为n*k

labels: 表示因子水平的名称,默认值为1:n

ordered: 逻辑变量,表示因子水平是否是有次序的,默认值为FALSE

g1 <- gl(3,3)  # 1 1 1 2 2 2 3 3 3

g2 <- gl(3,3,5)  # 1 1 1 2 2

g3 <- gl(3,2, labels = c('A', 'B', 'C'))  # A A B B C C

2、因子的索引

fc1[1]  #访问输出第一个水平

fc1[1:3]  #访问输出1~3个水平

fc1[c(1,4,7)]  #访问输出第1,4,7个水平值

fc1[-1]  #排除第一个

fc1[-c(1:4)] #排除第1~4ge

fc1[fc1!=1] #过滤掉等于1的因子水平

fc3[fc3>'Junior']  #对于有序因子可以使用>,>=,<,<=,!=,==;而非有序因子,只可以使用!=和==

注意:因为因子一般表示名义变量或有序变量,如非有序因子,则使用>,>=,<,<=比较大小是没有意义的。

本部分执行情况如下图所示:

3、因子的修改

fc1[1] <- 3  #注意,修改的值必须在原有的水平中

fc1[1:3] <- 2 #将1~3个水平值改为2

fc1[-1] <- 3 #将除第1个水平之外的其它水平值修改为3

fc1[-c(1,4,7)] <-1 #将除第1,4,7个水平之外的值修改为1


R语言中因子的创建与管理