¿Se pregunta si alguien se ha encontrado con un paquete / función en R que combine niveles de un factor cuya proporción de todos los niveles en un factor sea inferior a algún umbral? Específicamente, uno de los primeros pasos en la preparación de datos que realizo es colapsar niveles dispersos de factores (digamos en un nivel llamado 'Otro') que no constituyen al menos, digamos, 2% del total. Esto se hace sin supervisión y se hace cuando el objetivo es modelar alguna actividad en marketing (no detección de fraude, donde esos casos muy pequeños podrían ser extremadamente importantes). Estoy buscando una función que colapsará los niveles hasta que se alcance alguna proporción umbral.
ACTUALIZAR:
Gracias a estas excelentes sugerencias, escribí una función con bastante facilidad. Sin embargo, me di cuenta de que era posible colapsar los niveles con una proporción <el mínimo y todavía tener ese nivel recodificado ser <el mínimo, lo que requiere la adición del nivel más bajo con la proporción> el mínimo. Probablemente puede ser más eficiente, pero parece funcionar. La próxima mejora sería descubrir cómo capturar las "reglas" para aplicar la lógica de colapso a los nuevos datos (un conjunto de validación o datos futuros).
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