使用背景
我们时常需要对数值型数据进行归类,如我们收集收入时往往需要给出最直观的变量来告知我们这个值的收入是高、低还是中等。当然我们可以通过一系列函数来实现这个目的,但是cut函数是在R里最适合这类情况的。
函数介绍
cut函数中的变量,最常用的便是labels & names。
例子:
income<- as.vector(c(1000,2000,3000,4000,5000,8000,9500,12000,5000,2300,30000))
age<- c(20,18,23,22,30,44,23,33,30,29,40)
data<-data.frame(age,income)
data
这是初始data,结果为:
> data
age income
1 20 1000
2 18 2000
3 23 3000
4 22 4000
5 30 5000
6 44 8000
7 23 9500
8 33 12000
9 30 5000
10 29 2300
11 40 30000
如果希望加一列column来将income分类为 low,medium以及high,标准为income<=3000定义为low, 3000<income<=8000为medium, income>8000为high,我们可以使用which(data$[,2]>8000)类似的code来归类,但是很麻烦,cut函数完美解决了这个问题。
data[,'income.level']<- cut(data$income,breaks=c(-Inf,3000,8000,Inf),labels=c('low','medium','high'))
输出结果为:
> data
age income income.level
1 20 1000 low
2 18 2000 low
3 23 3000 low
4 22 4000 medium
5 30 5000 medium
6 44 8000 medium
7 23 9500 high
8 33 12000 high
9 30 5000 medium
10 29 2300 low
11 40 30000 high
breaks里面设计的是‘分段点’,labels里面的是每个区间内的命名。大家如果希望R自动来分段,可以写成breaks=n(希望分成多少段,对应的labels的数量也应该为n)。BTW,对于不再区间内的变量,R会自动输出为NA,并不会报错,有兴趣大家可以自己去试一下。
总结
对数值型数据进行分类,cut是一个比较合适的function,大家可以多练习尝试!