Czyszczenie poziomów czynników (zwijanie wielu poziomów / etykiet)

Jaki jest najbardziej skuteczny (tj. Skuteczny / odpowiedni) sposób oczyszczenia czynnika zawierającego wiele poziomów, które muszą zostać zwinięte? To znaczy, jak połączyć dwa lub więcej poziomów czynników w jeden.

Oto przykład, w którym dwa poziomy „Tak” i „Y” powinny zostać zwinięte do „Tak”, a „Nie” i „N” zwinięte do „Nie”:

## 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

Jedną z opcji jest oczywiście czyszczenie strun przed użyciem rękisub i przyjaciele.

Inną metodą jest zezwolenie na duplikowanie etykiety, a następnie ich upuszczenie

## 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) 

Jednak,czy istnieje bardziej skuteczny sposób?

Chociaż wiem, żelevels ilabels argumenty powinny być wektorami, eksperymentowałem z listami i nazwanymi listami i nazwanymi wektorami, aby zobaczyć, co się dzieje. Nie trzeba dodawać, że żaden z poniższych nie zbliżył mnie do celu.

  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"))

questionAnswers(9)

yourAnswerToTheQuestion