为了对连续变量进行分类,我使用以下代码进行分箱
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代码?
答案 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
此函数自然提供数值,我更喜欢左侧关闭的默认值。