Sie fragen sich, ob jemand in R auf ein Paket / eine Funktion gestoßen ist, die Ebenen eines Faktors kombiniert, dessen Anteil an allen Ebenen in einem Faktor unter einem bestimmten Schwellenwert liegt? Insbesondere besteht einer der ersten Schritte bei der Datenaufbereitung darin, spärliche Ebenen von Faktoren zusammenzufassen (z. B. zu einer Ebene namens "Andere"), die nicht mindestens 2% der Gesamtmenge ausmachen. Dies geschieht unbeaufsichtigt und dann, wenn das Ziel darin besteht, bestimmte Aktivitäten im Marketing zu modellieren (keine Betrugserkennung, bei der diese sehr kleinen Vorkommnisse äußerst wichtig sein können). Ich suche nach einer Funktion, die Ebenen zusammenbricht, bis ein bestimmter Schwellenwert erreicht ist.
AKTUALISIEREN:
Dank dieser großartigen Vorschläge habe ich ziemlich einfach eine Funktion geschrieben. Mir war jedoch klar, dass es möglich war, Ebenen mit einem Anteil <dem Minimum zu kollabieren und diesen neu codierten Wert dennoch <das Minimum zu haben, was die Hinzufügung des niedrigsten Niveaus mit Anteil> dem Minimum erforderlich machte. Kann wahrscheinlich effizienter sein, aber es scheint zu funktionieren. Die nächste Verbesserung wäre, herauszufinden, wie die "Regeln" für die Anwendung der Kollapslogik auf neue Daten (einen Validierungssatz oder zukünftige Daten) erfasst werden können.
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