Каков наиболее эффективный (то есть эффективный/подходящий) способ очистки фактора, содержащего несколько уровней, которые необходимо свернуть? То есть, как объединить два или более факторов в один.
Вот пример, где два уровня "Да" и "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"))