因子

  • 因子

(类别)名义变量和有序类别变量在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   

 

转载于:https://my.oschina.net/u/1785519/blog/1563005

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值