如何根据"信息"中的证据箱的重量来分类数据?包装在R

时间:2016-12-06 16:04:50

标签: r binning

R

中的以下代码行
library("Information")

set.seed(100)

Y <- sample(c(0,1), replace=TRUE, size=50)
X <- dnorm(rnorm(50))

data <- as.data.frame(cbind(X,Y))

create_infotables(data, y = "Y", bins = 5)

生成输出:

$Tables
$Tables$X
            X  N Percent        WOE         IV
1 [0.01,0.09]  9    0.18 -0.3834862 0.02655379
2  [0.1,0.23] 10    0.20  0.2451225 0.03839546
3 [0.25,0.36] 10    0.20 -0.5658078 0.10217411
4 [0.36,0.39] 10    0.20  0.2451225 0.11401578
5  [0.39,0.4] 11    0.22  0.3992731 0.14809223


$Summary
  Variable        IV
1        X 0.1480922

attr(,"class")
[1] "Information"

现在我想要实现的是将数据帧的X列转换为包含与数据点对应的bin的WOE值的列。因此,在数据框中使用区间[0.01,0.09]中的X值进行的观察应全部替换为值-0.3834862,依此类推。

我该如何处理?

cut()我离得更近了一点:

> cut(X, c(0,01.09,0.23,0.36,0.39,0.4),
      labels = c(-0.3834862,0.2451225,-0.5658078,0.2451225,0.3992731))

 [1] -0.5658078 0.2451225  -0.5658078 -0.3834862 -0.5658078 0.2451225  -0.3834862 0.2451225  0.2451225  0.2451225 
[11] -0.5658078 0.2451225  -0.5658078 -0.3834862 0.2451225  0.2451225  -0.3834862 -0.3834862 0.2451225  0.2451225 
[21] -0.3834862 -0.5658078 -0.3834862 0.2451225  -0.3834862 -0.5658078 -0.3834862 0.2451225  -0.3834862 -0.3834862
[31] 0.2451225  -0.3834862 -0.3834862 -0.3834862 0.2451225  -0.5658078 0.2451225  -0.5658078 -0.3834862 0.2451225 
[41] 0.2451225  0.2451225  0.2451225  0.2451225  0.2451225  -0.5658078 -0.3834862 -0.3834862 -0.3834862 -0.3834862
Levels: -0.3834862 0.2451225 -0.5658078 0.2451225 0.3992731
Warning message:
In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels,  :
  duplicated levels in factors are deprecated

但结果中的值是因子标签。 as.numeric()无效,因为它会返回标签号。 cut()的另一个问题是我不知道如何从$ Tables $ X $ X中提取切割点并将它们传递给cut函数。

1 个答案:

答案 0 :(得分:0)

  

但是结果中的值是因子标签。 as.numeric()无济于事,因为它返回标签号。

您期望什么?通常,cut()为您提供一个因子输出,其(字符串)标签包含换行符。

如果您只想获取级别代码的整数矢量,而不是(字符串)标签,请执行cut(, ...labels=FALSE)

但是显然您都不想要(那您想要什么?)。

  

cut()的另一个问题是我不知道如何从$ Tables $ X $ X中提取切点并将它们传递给cut函数。

您想从create_infotables()获取中断的向量:

  • 存储输出:mytbl <- create_infotables(data, y = "Y", bins = 5)
  • 然后找出mytbl的什么属性以获取自定义休息时间。查看ls(mytbl)attributes(mytbl)。说它是mytbl$mybreaks(我不知道那个软件包,但是您明白了)。
  • 然后使用自定义休息时间cut(mytbl, breaks=mytbl$mybreaks)