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

时间:2016-10-28 08:57:41

标签: r dplyr stringr

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

让数据框如下:

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")))

同样,我无法达到我想要的目标。

1 个答案:

答案 0 :(得分:1)

我们可以使用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