Почему recode_factor не позволяет сбрасывать уровни? - PullRequest
0 голосов
/ 02 апреля 2020

Мне нравится 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 требуется больше кода.

1 Ответ

1 голос
/ 02 апреля 2020

В recode_factor есть аргумент .default (см. Третий пример в файле справки):

recode_factor(chr_vec, `a` = "z", `b` = "y", `c` = "x", 
             .ordered = TRUE, 
             .default = NA_character_)

# [1] z    y    x    <NA> <NA>
# Levels: z < y < x

Аргумент .default:

Если указано, всем значениям, не согласованным иным образом, будет присвоено это значение. Если не предоставлено и если замены имеют тот же тип, что и исходные значения в .x, несопоставленные значения не изменяются. Если данные не указаны, а замены несовместимы, несоответствующие значения заменяются на NA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...