Ti chiedi se qualcuno ha incontrato un pacchetto / funzione in R che combinerà i livelli di un fattore la cui proporzione di tutti i livelli in un fattore è inferiore a qualche soglia? In particolare, uno dei primi passi nella preparazione dei dati che conduco è il collasso di livelli sparsi di fattori (diciamo in un livello chiamato "Altro") che non costituiscono almeno, diciamo, il 2% del totale. Questo viene fatto senza supervisione e viene fatto quando l'obiettivo è quello di modellare alcune attività di marketing (non il rilevamento di frodi, in cui eventi molto piccoli potrebbero essere estremamente importanti). Sto cercando una funzione che crollerà i livelli fino a quando non verrà raggiunta una certa soglia.
AGGIORNARE:
Grazie a questi fantastici suggerimenti ho scritto una funzione abbastanza facilmente. Mi sono reso conto però che era possibile far crollare i livelli con proporzione <il minimo e avere comunque quel livello ricodificato <il minimo, richiedendo l'aggiunta del livello più basso con proporzione> il minimo. Probabilmente può essere più efficiente ma sembra funzionare. Il prossimo miglioramento sarebbe capire come catturare le "regole" per applicare la logica di compressione a nuovi dati (un set di validazione o dati futuri).
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