Очистка уровней факторов (сворачивание нескольких уровней / меток)

Каков наиболее эффективный (т.е. эффективный / подходящий) способ очистки фактора, содержащего несколько уровней, которые необходимо свернуть? То есть, как объединить два или более уровня факторов в один.

Вот пример, где два уровня «Да» и «Y» должны быть свернуты до «Да», а «Нет» и «N» свернуты до «Нет»:

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

Одним из вариантов, конечно, является очистка строк перед использованиемsub и друзья.

Другой метод - разрешить дублирование меток, а затем отбросить их.

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

Тем не мение,есть ли более эффективный способ?

Хотя я знаю, чтоlevels а такжеlabels аргументы должны быть векторами, я экспериментировал со списками и именованными списками и именованными векторами, чтобы увидеть, что происходит Излишне говорить, что ни одно из следующего не приблизило меня к моей цели.

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

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

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