Tự hỏi nếu có ai đã chạy qua một gói / hàm trong R sẽ kết hợp các cấp của một yếu tố có tỷ lệ của tất cả các cấp trong một yếu tố nhỏ hơn một số ngưỡng? Cụ thể, một trong những bước đầu tiên trong quá trình chuẩn bị dữ liệu mà tôi tiến hành là kết hợp các mức yếu tố thưa thớt với nhau (nói thành một mức gọi là 'Khác'), không chiếm ít nhất 2% tổng số. Điều này được thực hiện không giám sát và được thực hiện khi mục tiêu là mô hình hóa một số hoạt động trong tiếp thị (không phát hiện gian lận, trong đó những sự cố rất nhỏ có thể cực kỳ quan trọng). Tôi đang tìm kiếm một chức năng sẽ thu gọn các mức cho đến khi một số tỷ lệ ngưỡng được đáp ứng.
CẬP NHẬT:
Nhờ những gợi ý tuyệt vời này mà tôi đã viết một chức năng khá dễ dàng. Mặc dù vậy, tôi đã nhận ra rằng có thể thu gọn các mức với tỷ lệ <tối thiểu và vẫn có mức được mã hóa lại là <tối thiểu, yêu cầu bổ sung mức thấp nhất với tỷ lệ> tối thiểu. Có khả năng có thể hiệu quả hơn nhưng nó dường như làm việc. Cải tiến tiếp theo sẽ là tìm ra cách nắm bắt các "quy tắc" để áp dụng logic thu gọn cho dữ liệu mới (bộ xác thực hoặc dữ liệu trong tương lai).
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