因子

factor()

factor(x, levels = sort(unique(x), na.last = TRUE), labels, exclude = NA, ordered = FALSE)

  • 可以自行指定各离散取值水平(levels),不指定时由x的不同值来求得。
  • labels可以用来指定各水平的标签,不指定时用各离散取值的对应字符串。
  • exclude参数用来指定要转换为缺失值(NA)的元素值集合。
  • ordered取真值时表示因子水平(Levels)是有次序的。
  • 可以用is.factor()检验对象是否因子,用as.factor()把一个向量转换成一个因子。
##example1
> x<-c(4, 2, 2, 3);
> y<- factor(x);
[1] 4 2 2 3
Levels:  2 3 4

> factor (x, order=T);
[1] 4 2 2 3
Levels:  2 < 3 <4    # Levels 会有序排列

> factor(x,label=c("red", "black","white"))
[1] white  red  red   black  # red代表2,black代表3,white代表4                 
    Levels: red black white

> factor(x,label=c("red","black","white"),order=T);
[1] white  red  red   black 
     Levels: red < black < white

> factor(x, exclude=3,order=T);
[1] 4    2   2  <NA>
Levels:  2 < 4

> x<- c(1,0,1,1,0); >y=factor(x,levels=sort(unique(x),decreasing=T),labels=c("男", "女"), order=F);
> y
[1] 男 女 男 男 女
        Levels: 男 女 
        


##example2
> x<-c(1,0,1,1,0,2);
> y=factor(x,levels=c(1,0), labels=c("男", "女"), order=F)
> y
[1] 男   女   男   男   女   <NA>
Levels: 男 女
  • 可以用两个或多个因子进行交叉分类。比如,性别(sex)和职业(job)交叉分组可以用table(sex, job)来统计每一交叉类的频数,结果为一个矩阵,矩阵带有行名和列名,分别为两个因子的各水平名。
 > job=factor(c("teacher", "worker","worker", "worker","teacher"));
 > sex = factor(c("男", "女", "男", "男", "女"));
 > table(sex, job);

运行结果

          job
    sex  teacher worker
    男        1        2
    女        1        1

三维:

 > age=factor(c("old","old", "young","old","young"));
 > table(sex, job, age);

运行结果

`
在这里插入代码片
tapply(X, INDEX, FUN = NULL, …, default = NA, simplify = TRUE)

  • X是向量;INDEX是和X同等长度的因子
  • FUN是要执行的函数
  • simplify取默认的TRUE,返回一个标量,取FALSE时,返回一个列表list
 > sex = factor(c("男", "女", "男", "男", "女")) ;
 > h <- c(165, 170, 168, 172, 159)
 > tapply(h, sex, mean);

运行结果:

   男       女 
    168.3333 164.5000 
    
     > tapply(h, sex, mean, simplify=F)
      $男
    [1] 168.3333
	  $女
    [1] 164.5

gl()

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

  • n是水平数
  • k为重复的次数
  • length是结果的长度
  • labels是一个n维向量,表示因子的水平
  • ordered是逻辑变量,表示是否为有序因子,默认值为FALSE
 > gl(3,5)
   [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
   Levels: 1 2 3
 > gl(3,1,9)
   [1] 1 2 3 1 2 3 1 2 3
   Levels: 1 2 3
 > gl(3,1,8,labels=c("red","blue","white"))
   [1] red   blue  white red   blue  white red   blue 
   Levels: red blue white

猜你喜欢

转载自blog.csdn.net/qq_38265735/article/details/83113956