如何将分箱结果应用于原始数据?

时间:2017-05-26 00:11:28

标签: r intervals binning

为了对连续变量进行分类,我使用以下代码进行分箱

german<-read.csv("http://freakonometrics.free.fr/german_credit.csv", header=TRUE)
F=c(1,2,4,5,7,8,9,10,11,12,13,15,16,17,18,19,20,21)
for(i in F) german[,i]=as.factor(german[,i])
str(german)

german_interval<-classIntervals(german$Duration.of.Credit..month., n=4 ,style = "equal" )
german_interval

分箱的结果如下。

style: equal
  one of 4,960 possible partitions of this variable into 4 classes
 [4,21) [21,38) [38,55) [55,72] 
    554     359      73      14 

因此,我想改变值4&lt; = x&lt; 21 = 1,21&lt; = x&lt; 38 = 2,38 <=&lt; 55 = 3,55 <= x <72 = 4。 那么,如何在原始数据中应用这个值?

此外,如果您看到原始数据,则存在目标变量。这是一种可信度。而且,我想知道目标变量与每个部分的比率。具体地,[4,21] = 0:α%/ 1:α%,[21,35] = 0:α%,1:α%。如何做到这一点作为R代码?

3 个答案:

答案 0 :(得分:2)

您可以使用cut的时间间隔,只需指定中断。

## Some sample data
set.seed(2017)
x = rnorm(20,36,13)

cut(x, breaks=c(4,21,38,55,72), include.lowest=TRUE, right=FALSE)
 [1] [38,55) [21,38) [38,55) [4,21)  [21,38) [38,55) [4,21)  [21,38) [21,38)
[10] [55,72] [38,55) [55,72] [21,38) [38,55) [4,21)  [38,55) [21,38) [38,55)
[19] [21,38) [21,38)
Levels: [4,21) [21,38) [38,55) [55,72]

答案 1 :(得分:1)

而不是classInt::classinterval,更简单的解决方案是在基数中使用cut

german$gp <- cut(german$Duration.of.Credit..month., breaks=4, include.lowest=T)
levels(german$gp) <- c(1,2,3,4)

答案 2 :(得分:0)

当左边的间隔关闭时,基本函数findInterval最简洁。

german_interval<-findInterval(german$Duration.of.Credit..month., c(4,21,38,55,72) )
german_interval

此函数自然提供数值,我更喜欢左侧关闭的默认值。