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)
我该怎么做?
使用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)