आश्चर्य है कि अगर किसी ने आर में एक पैकेज / फ़ंक्शन को चलाया है जो एक कारक के स्तर को मिलाएगा जिसका कारक के सभी स्तरों का अनुपात कुछ सीमा से कम है? विशेष रूप से, डेटा तैयार करने के पहले चरणों में से एक, मैं आचरण करता हूं कि कारकों के विरल स्तरों को एक साथ समेटना है ('अन्य' नामक स्तर में) जो कुल का 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