cut函数把连续变量分割为类别
要将连续型变量变成离散型因子,需要对连续型变量进行切割,每个区间可成为一个因子。可以用cut函数完成连续型变量的切割工作。
函数cut()能够把数值变量切成不同的块,然后返回一个因子,对数值数据进行分组:使用cut函数对数值数据进行分组
cut(x,breaks,labels=NULL,include.lowest=FALSE,right=TRUE,dig.lab=3,ordered_result=FALSE,...)
参数 | 注释 |
---|---|
x | 数值变量 |
breaks | 切割点向量,有两个取值,单个整数(表示区分为几个区间)和向量(按照向量里面的数进行分割) |
labels | 每一个分组的标签,即离散化后因子的标签,#labels为TRUE时因子表示为区间,即标签 |
right | 逻辑值,默认为TRUE(左开右闭);FALSE(左闭右开) |
ordered | TRUE,生成有序因子 |
include.lowest | 逻辑值,indicating if an ‘x[i]’ equal to the lowest (or highest, for right = FALSE) ‘breaks’ value should be included. |
dig.lab=n | 表示区间分割值为n位小数 |
例1
x<-rep(0:3,c(1,2,3,4))
x
# [1] 0 1 1 2 2 2 3 3 3 3
length(x)
#[1] 10
cut(x,breaks=0:3)
#结果
[1] <NA> (0,1] (0,1] (1,2] (1,2] (1,2] (2,3]
[8] (2,3] (2,3] (2,3]
Levels: (0,1] (1,2] (2,3]
#解释:
breaks=0:3,即0,1,2,3;由于right为默认值(左开右闭),所以将
区间分为(0,1]、(1,2]、(2,3]
x的值为0 1 1 2 2 2 3 3 3 3
- 0不属于所分区间,返回<NA>
- 1属于区间(0,1],返回(0,1]
- 1属于区间(0,1],返回(0,1]
- 2属于区间(1,2],返回(1,2]
… - 3属于区间(2,3],返回(2,3]
#x
#[1] 0 1 1 2 2 2 3 3 3 3
cut(x,c(-Inf,0,1,2,3,Inf))
#结果
[1] (-Inf,0] (0,1] (0,1] (1,2] (1,2]
[6] (1,2] (2,3] (2,3] (2,3] (2,3]
5 Levels: (-Inf,0] (0,1] (1,2] ... (3, Inf]
#5个区间,默认左开右闭
#0属于区间(-Inf,0],返回(-Inf,0]
#1属于区间(0,1],返回(0,1]
...
例2
y<-c(1,2,3,4,5,2,3,4,5,6,7)
cut(y,3,dig.lab=4,ordered=TRUE)
#breaks为单个整数,表示区分为几个区间
#dig.lab表示区间分割值为4位小数
#ordered=TRUE,生成有序因子
#结果
[1] (0.994,3] (0.994,3] (0.994,3] (3,5]
[5] (3,5] (0.994,3] (0.994,3] (3,5]
[9] (3,5] (5,7.006] (5,7.006]
Levels: (0.994,3] < (3,5] < (5,7.006]
例3:
现在想将年龄age分为小孩,青年,中年,老年,可将区间分为
age<=12的为小孩;12<age<=30的为青年;30<age<=60的为中年
age>60的为老年,使用cut函数,代码如下;
age<-c(55,12,30,9,22,24,78,109,45,66,49)
height<-c(156,175,154,165,184,125,148,168,155,157,168)
dd<-data.frame(age,height)
dd
#结果
age height
1 55 156
2 12 175
3 30 154
4 9 165
5 22 184
6 24 125
7 78 148
8 109 168
9 45 155
10 66 157
11 49 168
a<-cut(dd$age,breaks=c(-Inf,12,30,60,Inf),
labels = c("小孩","青年","中年","老年"))
dd<-cbind(dd,a)
dd
#结果
age height a
1 55 156 中年
2 12 175 小孩
3 30 154 青年
4 9 165 小孩
5 22 184 青年
6 24 125 青年
7 78 148 老年
8 109 168 老年
9 45 155 中年
10 66 157 老年
11 49 168 中年