Le nettoyage du taux de facteur (l'effondrement des niveaux multiples/étiquettes)

Ce qui est le plus efficace (c'est à dire efficace et appropriée) à un facteur contenant plusieurs niveaux qui doivent être effondrée? C'est, comment combiner deux ou plusieurs niveaux de facteur de dans un.

Voici un exemple où les deux niveaux de "Oui" et "Y" doit être effondré à "Oui" et "Non" et "N" s'est effondré "No":

## Given: 
x <- c("Y", "Y", "Yes", "N", "No", "H")   # The 'H' should be treated as NA

## expectedOutput
[1] Yes  Yes  Yes  No   No   <NA>
Levels: Yes No  # <~~ NOTICE ONLY **TWO** LEVELS

Une option est bien sûr pour nettoyer les cordes avant de la main à l'aide sub et amis.

Une autre méthode, est de permettre un double de l'étiquette, puis déposez-les

## Duplicate levels ==> "Warning: deprecated"
x.f <- factor(x, levels=c("Y", "Yes", "No", "N"), labels=c("Yes", "Yes", "No", "No"))

## the above line can be wrapped in either of the next two lines
factor(x.f)      
droplevels(x.f) 

Cependant, est-il un moyen plus efficace?


Même si je sais que la levels et labels arguments doivent être des vecteurs, j'ai expérimenté avec des listes et nommé listes et nommé vecteurs pour voir ce qui se passe
Inutile de dire que rien de ce qui suit m'a plus près de mon but.

  factor(x, levels=list(c("Yes", "Y"), c("No", "N")), labels=c("Yes", "No"))
  factor(x, levels=c("Yes", "No"), labels=list(c("Yes", "Y"), c("No", "N")))

  factor(x, levels=c("Y", "Yes", "No", "N"), labels=c(Y="Yes", Yes="Yes", No="No", N="No"))
  factor(x, levels=c("Y", "Yes", "No", "N"), labels=c(Yes="Y", Yes="Yes", No="No", No="N"))
  factor(x, levels=c("Yes", "No"), labels=c(Y="Yes", Yes="Yes", No="No", N="No"))
  • N'ai pas testé encore, mais la R 3.5.0 (2018-04-23) notes de dire "facteur(x, niveaux, étiquettes) permet maintenant dupliqué étiquettes (non reproduit les niveaux!). Par conséquent, vous pouvez mapper les différentes valeurs de x pour le même niveau directement."