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函数。
答案 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)