Querendo saber se alguém já se deparou com um pacote / função em R que combinará níveis de um fator cuja proporção de todos os níveis de um fator seja menor que algum limite? Especificamente, uma das primeiras etapas na preparação de dados que eu conduzo é recolher níveis esparsos de fatores (digamos, em um nível chamado 'Outro') que não constituam pelo menos 2% do total. Isso é feito sem supervisão e é feito quando o objetivo é modelar alguma atividade de marketing (não a detecção de fraudes, onde essas ocorrências muito pequenas podem ser extremamente importantes). Eu estou procurando por uma função que reduza os níveis até que alguma proporção de limite seja atingida.
ATUALIZAR:
Graças a essas ótimas sugestões, escrevi uma função com bastante facilidade. Percebi, porém, que era possível reduzir os níveis com proporção <o mínimo e ainda assim esse nível recodificado ser <o mínimo, exigindo a adição do nível mais baixo com proporção> o mínimo. Provavelmente pode ser mais eficiente, mas parece funcionar. O próximo aprimoramento seria descobrir como capturar as "regras" para aplicar a lógica de recolhimento a novos dados (um conjunto de validação ou dados 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