如何在R中使用str_pad为Code列数字补零至3位?
补零处理code列的正确方法
你之前用str_pad的写法有几个问题:一是不该用$引用列(管道流里直接写列名即可),二是参数顺序和格式不对。str_pad是stringr包的函数,正确用法是:
str_pad(目标列, 目标宽度, side = "补零方向", pad = "0")
因为你要在数字左侧补零到3位,所以指定side = "left",pad = "0",宽度设为3。另外要注意,如果code是数值类型,需要先转成字符型(as.character(code)),否则str_pad无法正确处理。
管道中的插入位置
可以把补零的mutate步骤放在slice之后、arrange之前,或者arrange之后都行——只要是在筛选出目标行之后处理列就可以。推荐放在slice之后,这样只需要处理最终保留的行,效率更高。
完整代码如下:
library(dplyr) library(stringr) # 必须先加载stringr包 Animals %>% gather(most_common, cnt, M:OG) %>% group_by(name) %>% slice(which.max(cnt)) %>% mutate(code = str_pad(as.character(code), width = 3, side = "left", pad = "0")) %>% arrange(code)
如果你的code列本身已经是字符类型,就可以省略as.character(),直接写:
mutate(code = str_pad(code, 3, "left", "0"))
这样处理后,两位数的code就会变成带前导零的3位字符串,比如32转为"032",满足后续合并数据的需求。
内容的提问来源于stack exchange,提问作者Stackueations
相关产品推荐
相关产品推荐

