
基本数据集mtcars(32辆汽车11个指标数据)

参数说明:
[, 1] mpg Miles/(US) gallon
[, 2] cyl Number of cylinders
[, 3] disp Displacement (cu.in.)
[, 4] hp Gross horsepower
[, 5] drat Rear axle ratio
[, 6] wt Weight (1000 lbs)
[, 7] qsec 1/4 mile time
[, 8] vs Engine (0 = V-shaped, 1 = straight)
[, 9] am Transmission (0 = automatic, 1 = manual)
[,10] gear Number of forward gears
[,11] carb Number of carburetors
哪些可以作为分类的因子变量?
cyl vs am gear carb
> table(mtcars$cyl)
4 6 8
11 7 14
> table(mtcars$am)
0 1
19 13
> data<-c("Type1","Type2","Type1","Type1")
> typeof(data) #字符型向量
[1] "character
> f_data<-factor(data) #转换成因子型
> f_data
[1] Type1 Type2 Type1 Type1
Levels: Type1 Type2
> as.numeric(f_data) #以数值型显示
[1] 1 2 1 1
> mode(f_data)
[1] "numeric"
> typeof(f_data)
[1] "integer"
> class(f_data)
[1] "factor“
> grade<-c('B','A','A','B','B')
> fac_grade<-factor(grade,levels=c('A','B','C'))
> fac_grade
[1] B A A B B
Levels: A B C
> fac_grade[length(fac_grade)+1]<-'C'
> fac_grade
[1] B A A B B C
Levels: A B C
通过factor函数的参数levels指定水平,否则,默认来源于因子向量
> fac_grade[length(fac_grade)+1]<-'D'
Warning message:
In `[<-.factor`(`*tmp*`, length(fac_grade) + 1, value = "D") :
invalid factor level, NA generated
> fac_grade
[1] B A A B B C
Levels: A B C
> summary(fac_grade)
A B C NA's
2 3 1 1
> plot(mtcars$cyl)
> mtcars$cyl
[1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4

说明:plot函数的数据集如果是向量,则输出散点图
> fcyl<-factor(mtcars$cyl)
> fcyl
[1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4
Levels: 4 6 8
> plot(fcyl)

说明:plot函数的数据集如果是因子,则输出条形图
函数基本形式:
tapply(x,f,g),其中:x表示向量,f表示因子或者因子列表,g表示函数
函数执行过程:
暂时将x进行分组,每组对应一个因子水平(在多重因子的情况下对应一组因子水平的组合),得到x的子向量,然后这些子向量应用函数g()。
> x<-c("M","F","F","M","M")
> sex<-factor(x)
> h<-c(165,170,168,172,159)
> tapply(h,sex,mean)
F M
169.0000 165.3333
split(x,f):将x按照因子f或者列表进行分组,然后返回分组的列表
#创建数据框
> gender<-c("M","M","F","M","F","F")
> age<-c(45,48,50,32,38,27)
> income<-c(55000,88000,34567,76899,56789,23455)
> over35<-c(1,1,1,0,1,0)
> df<-data.frame(gender,age,income,over35)
gender age income over35
1 M 45 55000 1
2 M 48 88000 1
3 F 50 34567 1
4 M 32 76899 0
5 F 38 56789 1
6 F 27 23455 0
将“income”按“gender”进行分类
> split(df$income,df$gender)
$F
[1] 34567 56789 23455
$M
[1] 55000 88000 76899
将“income”按“gender”和“over35”组成的列表进行分类
> split(df$income,list(df$gender,df$over35))
$F.0
[1] 23455
$M.0
[1] 76899
$F.1
[1] 34567 56789
$M.1
[1] 55000 88000