Datenumwandlung in R: Besser mit Zeilenwerten oder Faktorstufen arbeiten?

Sagen Sie, Sie bemerken, dass einige der Werte in Ihrem großen Vektor von Faktoren ähnlich sind. Was ist die bessere Strategie, um diese Werte zu festigen? In meinen Analysen habe ich zwei Strategien verwendet, die beide in ihrer Leistung vergleichbar erscheinen. 1, die Konsolidierungslogik in eine Funktion setzen und @ verwendsapply und 2, wodurch die Faktorstufen selbst geändert werden. Unten habe ich jeweils ein Beispiel erstellt.

Beispiel 1, Einfügen der Konsolidierungslogik in eine Funktion und Verwenden vonsapply:

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

Beispiel 2, bei dem die Faktorbeschriftungen selbst direkt geändert werden:

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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage