因子到因子的条件重新编码

Eri*_*ail 3 r recode tidyverse tibble

我有一个 tibble, df, , , A, 我希望:

1) 的副本C, 和
2) 基于第二个变量重新编码B

目前我正在以这种迂回的方式进行。我对因子的条件重新编码感到非常困惑。我也看了dplyr'srecode,但找不到更聪明的方法。

library(tibble)
df  <- tibble(
  A = factor(c(NA, "b", "c")), 
  B = c(1,NA,3)
)
Run Code Online (Sandbox Code Playgroud)

我最初的小费

df
#> # A tibble: 3 x 2
#>        A     B
#>   <fctr> <dbl>
#> 1   <NA>     1
#> 2      b    NA
#> 3      c     3
Run Code Online (Sandbox Code Playgroud)

我当前解决方案中的第 1 步

df$C <- with(df, ifelse(is.na(B), 'B is NA', A)) 
df
#> # A tibble: 3 x 3
#>        A     B       C
#>   <fctr> <dbl>   <chr>
#> 1   <NA>     1    <NA>
#> 2      b    NA B is NA
#> 3      c     3       2
Run Code Online (Sandbox Code Playgroud)

我当前解决方案中的第 2 步

df$C <- dplyr::recode_factor(df$C, '2' = 'c')
df
#> # A tibble: 3 x 3
#>        A     B       C
#>   <fctr> <dbl>  <fctr>
#> 1   <NA>     1    <NA>
#> 2      b    NA B is NA
#> 3      c     3       c
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

zx8*_*754 5

使用dplyr::if_else,将因子转换为字符,然后再次转换为因子:

library(dplyr)

df %>% 
  mutate(C = factor(if_else(is.na(B), "B is NA", as.character(A))))

# # A tibble: 3 x 3
#          A     B       C
#     <fctr> <dbl>  <fctr>
#   1   <NA>     1    <NA>
#   2      b    NA B is NA
#   3      c     3       c
Run Code Online (Sandbox Code Playgroud)