想知道是否有人在 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