2016-08-11 2 views
0

Я пишу функцию R, которая принимает столбец dataframe (вероятно, предпочтительно фактор типа) и объединяет все записи под пользовательской частотой как «другие». Это делается для очистки данных.Лучший способ записать эту функцию очистки данных R?

Вот что я написал:

zcut <- function(column, threshold){ 
    dft <- data.frame(table(column)) 
    dft_ind <- sapply(dft$Freq, function(x) x < threshold) 
    dft_list <- dft[[1]][dft_ind] 
    levels(column)[levels(column) %in% dft_list] <- "Other" 
    return(column) 
} 

Я думаю, что это довольно просто, но есть способы, чтобы сделать мой код более кратким или точным?

Я бы спросил об этом в обзоре стека обмена кодом, хотя мне непонятно, что многие эксперты R скрываются там.

+2

Вот несколько идей: http://stackoverflow.com/q/34385340/ – Frank

+2

Имея «фактор», 'table' уважает свои« уровни », поэтому вы можете просто заменить низкочастотные« уровни »на 'levels (column) [table (column)

ответ

1

Здесь не нужно sapply. Попытка:

dft_ind <- dft$Freq < threshold 

Это должно ускорить выполнение функции в случае больших данных.

Смежные вопросы