Transformación de datos en R: ¿es mejor operar en valores de fila o niveles de factor?

Digamos que notas que algunos de los valores en tu gran vector de factores son similares. ¿Cuál es la mejor estrategia para consolidar estos valores? He utilizado dos estrategias en mis análisis, las cuales parecen comparables en rendimiento. 1, poner la lógica de consolidación en una función y usarsapply, y 2, alterando los niveles de factores en sí. A continuación he producido un ejemplo de cada uno.

Ejemplo 1, poner la lógica de consolidación en una función y usarsapply:

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

Ejemplo 2, alterando directamente las etiquetas de los factores:

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta