变量的重编码

  • 重编码变量

如将1~99的之间的年龄分为Young、Middle Aged、Elder

  • 案例
#重新编码变量
#年龄99设置成NA
> leadership$age[leadership$age == 99] <- NA  #variable[condition] <- expression将仅在condition = T时执行赋值

#<35 为Young,35<= <=40为Middle Aged ,>40为Elder 
> leadership$agecat[leadership$age < 35] <- "Young"
> leadership$agecat[leadership$age >= 35 & leadership$age <= 40] <- "Middle Aged"
> leadership$agecat[leadership$age > 40] <- "Elder"
> leadership$agecat
[1] Young       Elder       Young       Middle Aged <NA>      

    
> str(leadership$agecat)  #查看结构
 chr [1:5] "Young" "Elder" "Young" "Middle Aged" NA
> class(leadership$agecat) #查看类型
[1] "character"  

#转化为有序因子
> leadership$agecat <- as.factor(leadership$agecat) #先转化为因子
#转化为有序因子:设置ordered为T,并且通过levels设置排序等级
> leadership$agecat <- factor((as.factor(leadership$agecat)),ordered = T,levels = c("Young","Middle Aged","Elder") )
> str(leadership$agecat)
 Ord.factor w/ 3 levels "Young"<"Middle Aged"<..: 1 3 1 2 NA

> leadership$agecat   #再查看下,发现是有序因子了。
[1] Young       Elder       Young       Middle Aged <NA>       
Levels: Young < Middle Aged < Elder
 

使用within()代码更加的紧凑

within()与with()类似,不同的是它允许你修改数据框

#使用 within()
> leadership <- within(leadership,{                                     #注意格式为within(object,{expression})
+                      agecat <- NA                                     #首先建立了agecat变量,并将每一行都设置为缺失值
+                      agecat [age > 40] <- "Elder"                     #花括号{}中剩下的语句接下来依次执行
+                      agecat [age >=35 & age <=40] <- "Middle Aged"
+                      agecat [age < 35] <- "Young"})
> leadership$agecat
[1] "Young"       "Elder"       "Young"       "Middle Aged" NA 

#转化为有序因子部分同上

 

  • 逻辑运算符
运算符    描述    
<,<=,>=,>小于,小于等于,大于,大于等于
==    严格等于
(类似其他的科学计算语言,在R中比较浮型数值时请慎用==,以防出现误判)
!=    不等于
!x    非 x
x | y    x 或 y
x & y    x 和 y
isTRUE(x)    测试 x 是否为 TRUE

 

  • 其他

car包中的recode()函数可十分简单的重编码数值型、字符型向量或因子

recode(var, recodes, as.factor.result, as.numeric.result=TRUE, levels)

#安装:install.packages("car")
>libarary(car)
>x<-c(10:100)
>recode(x,"lo:60='C';61:80='B';81-hi='A';else='NULL'")
#lo表示最小值;hi表示最大值。

 

doBy包提供recodevar()

R中自带cut()可将一个数值型变量按值域切割为多个区间,并返回一个因子

 

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值