如何使用 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"))
但是,两者都行不通。
我也尝试过使用 mutate
和 replace
:
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
如果字符数为 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"))
但是,两者都行不通。
我也尝试过使用 mutate
和 replace
:
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