- 因子
(类别)名义变量和有序类别变量在R中称因子,因子的不同表现称为水平
- factor()函数
1、 factor()以一个整数向量的形式存储类别值,整数的取值范围是[1...k](其中 k 是名义变量),同时一个由字符串(原始值)组成的内部向量将映射到这些整数上
diabetes <- c("Type1","Type2","Type1","Type1")
diabetes <- factor(diabetes)
#将此向量存储为(1,2,1,1),且内部将其关联为 1=Type1和2=Type2(具体赋值视字母的顺序而定)
#针对向量diabetes进行任何分析都会将其当作名义变量对待,并自动选择适合的一测量的尺度的统计方法
2、需要表示 有序变量,要指定参数 ordered = T(order也可以把,看到书籍中自己都矛盾了。)
status <- c("Poor","Improved","Excellent","Poor")
status <- factor(status,ordered = T)
#此向量存储为(3,2,1,3),且内部将其关联为1 = Excellent,2=Improved,3=Poor,因子的水平默认按照字母顺序创建,所以在这E开头的排1
#进行分析时作为有序顺变量对待
3、levels指定有序变量的顺序
#默认是按字母顺序创建,通过levels直接指定新的顺序
status <- factor(status,order = T,
levels = c("Poor","Improved","Excellent"))#得到 Poor=1,Improved=2,Excellent=3的顺序
注
请保证指定的水平与数据中的真实值相匹配,因为任何在数据中出现而未在参数中列举的数据都会被设为缺失值
4、指定标签labels
sex <-factor(sex,levels = c(1,2),labels = c("Male","Female"))
#将sex变量,通过levels设定为1,2,标签labels设定为“Male”“Female”将代替1,2在结果中输出
案例
> patientID <- c(1, 2, 3, 4)
> age <- c(25, 34, 28, 52)
> diabetes <- c("Type1", "Type2", "Type1", "Type1")
> status <- c("Poor", "Improved", "Excellent", "Poor")
> diabetes <- factor(diabetes)
> status <- factor(status, order=TRUE)
> patientdata <- data.frame(patientID, age, diabetes, status)
> str(patientdata)
'data.frame': 4 obs. of 4 variables:
$ patientID: num 1 2 3 4
$ age : num 25 34 28 52
$ diabetes : Factor w/ 2 levels "Type1","Type2": 1 2 1 1
$ status : Ord.factor w/ 3 levels "Excellent"<"Improved"<..: 3 2 1 3
> summary(patientdata) #统计连续变量的最大值、最小值,四分位值,中位数,均值;类别变量(名义变量、分类变量)的频数
patientID age diabetes status
Min. :1.00 Min. :25.00 Type1:3 Excellent:1
1st Qu.:1.75 1st Qu.:27.25 Type2:1 Improved :1
Median :2.50 Median :31.00 Poor :2
Mean :2.50 Mean :34.75
3rd Qu.:3.25 3rd Qu.:38.50
Max. :4.00 Max. :52.00