【发布时间】:2016-12-06 16:04:50
【问题描述】:
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值的列。因此,数据框中的 X 值在 [0.01,0.09] 区间内的观察值应全部替换为值 -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可以将X转换成一个名义变量,你可以用它来分配你想要的值。 -
我使用 cut 离得更近了一点:
-
听起来您想存储和使用从
create_infotables()创建的中断,然后在cut()中使用它们。如果您想要整数级别的向量而不是标签,请使用cut(..., labels=F)。