1.因子的创建
因子利用函数factor()来创建。其格式为
factor(x = character(), levels, labels = levels,
exclude = NA, ordered = is.ordered(x), nmax = NA)
x为字符型和数值型向量;levels为指定的因子水平;labels为指定的因子水平的名称;exclude表示要剔除的水平;ordered 表示因子的水平是否有次序;nmax表示因子数目的上界。
> x<-c(4, 6 ,4 ,6 ,6 ,6 ,6 ,3 ,1 ,4 ,5, 3 ,1 ,2 ,6, 4 ,5 ,3 ,6, 2)
> x
[1] 4 6 4 6 6 6 6 3 1 4 5 3 1 2 6 4 5 3 6 2
> fact<-factor(x)
> fact#有六个水平:1 2 3 4 5 6
[1] 4 6 4 6 6 6 6 3 1 4 5 3 1 2 6 4 5 3 6 2
Levels: 1 2 3 4 5 6
指定因子水平的名称
> x<-c(4, 6 ,4 ,6 ,6 ,6 ,6 ,3 ,1 ,4 ,5, 3 ,1 ,2 ,6, 4 ,5 ,3 ,6, 2)
> fact<-factor(x,label=c("A","B","C","D","E","F"))
> fact
[1] D F D F F F F C A D E C A B F D E C F B
Levels: A B C D E F
定义有次序水平的因子
> x<-c(4, 6 ,4 ,6 ,6 ,6 ,6 ,3 ,1 ,4 ,5, 3 ,1 ,2 ,6, 4 ,5 ,3 ,6, 2)
> fact<-factor(x,label=c("A","B","C","D","E","F"),order=T)
> fact
[1] D F D F F F F C A D E C A B F D E C F B
Levels: A < B < C < D < E < F
用函数gl创建因子向量
gl(n, k, length = n*k, labels = seq_len(n), ordered = FALSE)
n表示给定的水平个数;k表示每个水平的重复数。
> fa<-gl(2,5)
> fa
[1] 1 1 1 1 1 2 2 2 2 2
Levels: 1 2
> fa<-gl(2,5,lable=c("F","M"))
> fa<-gl(2,5,label=c("F","M"))
> fa
[1] F F F F F M M M M M
Levels: F M
> fa<-gl(2,5,label=c("F","M"),ordered=T)
> fa
[1] F F F F F M M M M M
Levels: F < M
2.tapply函数
tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE)
x表示向量;INDEX表示因子或者因子列表;FUN为函数;simply为逻辑参数,如果为FALSE,tapply返回的是列表,如果为TRUE,返回的是向量。
> x<-sample(1:4,20,replace=T)
> x
[1] 3 2 4 3 3 4 3 4 3 3 3 4 1 1 2 3 2 1 3 4
> y<-factor(x,labels=c("A","B","C","D"))
> y
[1] C B D C C D C D C C C D A A B C B A C D
Levels: A B C D
> tapply(x,y,mean)
A B C D
1 2 3 4
> tapply(x,y,sum)#返回向量
A B C D
3 6 27 20
> tapply(x,y,sum,simplify=F)#返回列表
$A
[1] 3
$B
[1] 6
$C
[1] 27
$D
[1] 20