如何使用 mutate/mutate_if 对变量中的某些值使用 str_pad?

How to use str_pad on certain values in a variables using mutate/mutate_if?

如果字符数为 2,我想用零(在左侧)填充字符串。

设dataframe如下:

df<-data.frame(a=c("352","35","54","1"),stringsAsFactors=FALSE)

我想得到

df
    a
1 352
2 035
3 054
4 1

我尝试使用 mutate_if 如下:

df %>% mutate_if(nchar(a)==2,str_pad(a,width=3,side="left",pad="0"))

df %>% mutate_if(nchar(vars(a))==2,str_pad(a,width=3,side="left",pad="0"))

但是,两者都行不通。

我也尝试过使用 mutatereplace:

df %>% mutate(a=replace(a,which(nchar(a)==2),str_pad(a,width=3,side="left",pad="0")))

同样,我无法实现我想要的。

我们可以使用 if_else

df %>% 
   mutate(a = if_else(nchar(a)==2, str_pad(a,width=3,side="left",pad="0"), a))

case_when

df %>%
     mutate(a = case_when(nchar(.$a)==2 ~ str_pad(.$a, width = 3, side = "left", pad = "0"), 
                TRUE ~ .$a) )
#   a
#1 352
#2 035
#3 054
#4   1