Мне нравится recode_factor
из dplyr
, потому что это позволяет (1) перекодировать уровни факторов и (2) упорядочивать их одновременно. Мне также нравится, как он позволяет (3) сбрасывать уровни, когда вы превращаете числовой вектор c в факторный вектор. Например:
num_vec <- c(1:4, NA)
recode_factor(num_vec, `1` = "z", `2` = "y", `3` = "x", .ordered = TRUE,)
[1] z y x <NA> <NA>
Levels: z < y < x
Обратите внимание, что значение 4
, которое не перекодируется, превращается в NA
, поскольку оно интерпретируется как «несовместимое». Для меня это поведение практично. К сожалению, то же самое невозможно для символьных векторов (поскольку они интерпретируются как совместимые):
chr_vec <- c("a", "b", "c", "d", NA)
recode_factor(chr_vec, `a` = "z", `b` = "y", `c` = "x", .ordered = TRUE,)
[1] z y x d <NA>
Levels: z < y < x < d
Обратите внимание, что вместо превращения в NA
, d
остается само собой.
Есть ли способ обойти это последнее поведение - с таким же коротким кодом? Мне известен обычный метод factor
с указанным levels
, но, насколько мне известно, для выполнения (1) перекодирования уровней (2) упорядочения их (3) преобразования некоторых уровней в NA
требуется больше кода.