Lubię recode_factor z dplyr, ponieważ pozwala ci (1) poziomy współczynnika recyzowania i (2) zamówić je jednocześnie. Lubię też, jak pozwala ci (3) poziomy upadku, gdy przekręcisz wektor numeryczny w wektor współczynnika. Na przykład:

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

Zauważ, jak wartość 4, która nie jest rewilowana, włącza się w NA, ponieważ jest interpretowany jako "niezgodne". Dla mnie to zachowanie jest praktyczne. Niestety, to samo nie jest możliwe dla wektory znaków (ponieważ są one interpretowane jako kompatybilne):

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

Należy pamiętać, że zamiast obracać się w NA, d pozostaje sama.

Czy jest jakiś sposób wokół tego ostatniego zachowania - z równie krótkim kodem? Jestem świadomy zwykłego metody factor z levels, ale do mojej wiedzy wykonującej (1) recoding poziomów (2) Zamawianie je (3) Obracanie pewnych poziomów do NA wymaga więcej kod.

0
broti 2 kwiecień 2020, 16:33

1 odpowiedź

Najlepsza odpowiedź

Jest argument .default w recode_factor (patrz Trzeci przykład w pliku pomocy):

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

Argument .default:

W przypadku dostarczenia wszystkie wartości nie są dopasowane w inny sposób, otrzymają tę wartość. Jeśli nie jest dostarczany, a jeśli wymiany są tego samego typu, co oryginalne wartości w .x, niezrównane wartości nie są zmieniane. Jeśli nie jest dostarczany, a jeśli wymiany nie są kompatybilne, niezrównane wartości są zastępowane Na.

1
bouncyball 2 kwiecień 2020, 13:40