想知道是否有人在R中的某个包/函数上运行过,它将组合某个因子的水平,而该水平在一个因子中的所有水平的比例小于某个阈值?具体来说,我进行数据准备的第一步之一就是将稀疏的因子水平合在一起(称为“其他”因子),这些因子至少不构成总数的2%。这是在无监督的情况下完成的,并且当目标是为营销中的某些活动建模时(而不是欺诈检测,因为那些很小的事件可能非常重要),可以执行此操作。我正在寻找一个可以折叠水平直到达到某个阈值比例的函数。
更新:
由于这些出色的建议,我很容易地编写了一个函数。我确实意识到,虽然有可能使比例<最小值的水平崩溃,而仍然使重新编码的水平<最小值,但需要添加比例>最小值的最低水平。可能会更有效,但它似乎可以工作。下一个增强功能是弄清楚如何捕获将折叠逻辑应用于新数据(验证集或将来的数据)的“规则”。
collapseFactors<- function(tableName,minPercent=5,fillIn ="RECODED" )
{
for (i in 1:ncol(tableName))
{
if(is.factor(tableName[,i]) == TRUE) #process just factors
{
sortedTable<-sort(prop.table(table(tableName[,i])))
numberToCollapse<-length(sortedTable[sortedTable<(minPercent/100)])
if (sum(sortedTable[1:numberToCollapse])<(minPercent/100))
{
numberToCollapse=numberToCollapse+1 #add next level if < minPercent
}
if(numberToCollapse>1) #if not >1 then nothing to collapse
{
lf <- names(sortedTable[1:numberToCollapse])
levels(tableName[,i])[levels(tableName[,i]) %in% lf] <- fillIn
}
}#end if a factor
}#end for loop
return(tableName)
}#end function
对于另一种方法: stats.stackexchange.com/questions/227125/...
—
的Kjetil b HALVORSEN