Хотите знать, сталкивался ли кто-нибудь с пакетом / функцией в 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