Ingin tahu apakah ada yang menjalankan paket / fungsi dalam R yang akan menggabungkan level faktor yang proporsinya dari semua level dalam faktor kurang dari ambang tertentu? Secara khusus, salah satu langkah pertama dalam persiapan data yang saya lakukan adalah meruntuhkan tingkat faktor yang jarang (katakanlah ke tingkat yang disebut 'Lain-lain') yang tidak membentuk setidaknya, katakanlah, 2% dari total. Ini dilakukan tanpa pengawasan dan dilakukan ketika tujuannya adalah untuk memodelkan beberapa kegiatan dalam pemasaran (bukan deteksi penipuan, di mana kejadian yang sangat kecil itu bisa sangat penting). Saya mencari fungsi yang akan runtuh level sampai sebagian ambang batas terpenuhi.
MEMPERBARUI:
Berkat saran-saran hebat ini saya menulis sebuah fungsi dengan cukup mudah. Namun saya menyadari bahwa adalah mungkin untuk menghancurkan level dengan proporsi <minimum dan masih memiliki level yang dikode ulang menjadi <minimum, membutuhkan penambahan level terendah dengan proporsi> minimum. Mungkin bisa lebih efisien tetapi tampaknya berhasil. Peningkatan selanjutnya adalah mencari cara untuk menangkap "aturan" untuk menerapkan logika runtuh ke data baru (satu set validasi atau data masa depan).
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