Преобразование данных в R: лучше работать со значениями строк или уровней факторов?

Скажем, вы заметили, что некоторые значения в вашем большом векторе факторов похожи. Какова лучшая стратегия для консолидации этих ценностей? В своих анализах я использовал две стратегии, которые кажутся сопоставимыми по эффективности. 1, поместив логику консолидации в функцию и используяsapplyи 2, изменяя уровни факторов сами. Ниже я привел пример каждого.

Пример 1, размещение логики консолидации в функции и использованиеsapply:

favorite.color <- c('yellow', 'banana', 'canary yellow', 'aqua', 'blue')
messy.vector.of.favorite.colors <- as.factor(sample(favorite.color, 10000, replace=TRUE))

consolidate.colors <- function(color) {
     if(color == 'banana') {
         return('yellow')
     }
     if(color == 'canary yellow') {
         return('yellow')
     }
     if(color == 'aqua') {
         return('blue')
     }
     else {
         return(color)
     }
}

clean.colors <- as.factor(sapply(as.character(messy.vector.of.favorite.colors), consolidate.colors, USE.NAMES=FALSE))
# Gives factor vector with two levels: blue, yellow

Пример 2, непосредственно изменяющий сами метки факторов:

favorite.color <- c('yellow', 'banana', 'canary yellow', 'aqua', 'blue')
messy.vector.of.favorite.colors <- as.factor(sample(favorite.color, 10000, replace=TRUE))

working.vector <- messy.vector.of.favorite.colors
levels(working.vector)[levels(working.vector) == 'banana'] <- 'yellow'
levels(working.vector)[levels(working.vector) == 'canary yellow'] <- 'yellow'
levels(working.vector)[levels(working.vector) == 'aqua'] <- 'blue'

clean.colors <- working.vector
# Gives factor vector with two levels: blue, yellow

Ответы на вопрос(2)

Ваш ответ на вопрос