R语言中cut函数

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   中年
发布了8 篇原创文章 · 获赞 3 · 访问量 2265

猜你喜欢

转载自blog.csdn.net/qq_42374697/article/details/104088541