如何使用dplyr的recode_因子保持其他值不变

如何使用dplyr的recode_因子保持其他值不变,r,dplyr,R,Dplyr,在下面的示例中,重新编码某些值会使所有其他值都为NA。如何保持其他值不变 可供图书馆使用 图书馆弹琴 测试一个tible:3 x 1 >测试向量 > > 1 1 > 2 2 > 3 3 测试%>% mutatetest\u vec=recode\u factortest\u vec,`3`=4 >一个tibble:3x1 >测试向量 > > 1 > 2 > 3 4 需要使替换项的类型与原始值相同 test %>%

在下面的示例中,重新编码某些值会使所有其他值都为NA。如何保持其他值不变

可供图书馆使用 图书馆弹琴 测试一个tible:3 x 1 >测试向量 > > 1 1 > 2 2 > 3 3 测试%>% mutatetest\u vec=recode\u factortest\u vec,`3`=4 >一个tibble:3x1 >测试向量 > > 1 > 2 > 3 4
需要使替换项的类型与原始值相同

test %>% 
  mutate(test_vec = recode_factor(test_vec, "3" = "4"))

# A tibble: 3 x 1
  test_vec
  <fct>   
1 1       
2 2       
3 4   

为了不丢失NA值,还必须在函数中列出其他值

test %>% 
   mutate(test_vec = recode_factor(test_vec, `1` = 1, `2` = 2, `3` = 4))
结果

# A tibble: 3 x 1
  test_vec
  <fct>   
1 1       
2 2       
3 4
# A tibble: 3 x 1
  test_vec
  <fct>   
1 1       
2 2       
3 4  
使用fct_重新编码

-输出

# A tibble: 3 x 1
#  test_vec
#  <fct>   
#1 1       
#2 2       
#3 4    

另一种方法是使用case_when,但为此,必须从数值开始。 我给你们一个从数值开始的例子,我把它们转换成因子

test <- tibble(
   test_vec = (c(1, 2, 3)))
test %>% 
   mutate(test_vec = case_when( test_vec != 3 ~ test_vec,
                                test_vec == 3 ~ 4)) %>% 
   mutate(across(test_vec,factor))
结果

# A tibble: 3 x 1
  test_vec
  <fct>   
1 1       
2 2       
3 4
# A tibble: 3 x 1
  test_vec
  <fct>   
1 1       
2 2       
3 4  

是的,但当有更多的价值观时,这很快就会变得令人讨厌