- 重编码变量
如将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()可将一个数值型变量按值域切割为多个区间,并返回一个因子