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