如何用mutate()与str_pad生成目标tibble的Muncode列?
解决方法
你的代码存在语法格式错误、列引用错误,以及逻辑不符合需求的问题,修正后的可行方案如下:
错误分析
- mutate创建新列的语法应为
新列名 = 表达式,你写成了函数调用格式Muncode(str_pad(...)),属于语法错误。 - 在dplyr管道中直接使用列名
Code即可,无需$code,且你写错了列名的大小写(原数据列是Code而非code)。 - 你需要的是在
Code前固定添加01前缀,而非单纯补前导0到4位,原逻辑会生成0018这类不符合要求的结果。
可行代码
假设你的数据框名为df,使用tidyverse工具包的代码如下:
library(dplyr) library(stringr) # 生成目标列 df <- df %>% mutate(Muncode = paste0("01", str_pad(Code, 2, side = "left", pad = "0")))
代码说明
str_pad(Code, 2, side = "left", pad = "0"):确保Code转为2位字符,比如如果存在个位数的Code(如5),会转为05,避免出现015这类3位的情况。paste0("01", ...):在处理后的Code前拼接01前缀,最终得到4位的Muncode。
示例验证
先构造示例数据:
df <- tibble(Code = c(18,19,20,21,22,23))
运行上述代码后,结果如下:
# A tibble: 6 × 2 Code Muncode <dbl> <chr> 1 18 0118 2 19 0119 3 20 0120 4 21 0121 5 22 0122 6 23 0123
内容的提问来源于stack exchange,提问作者Joseph Carthof
相关产品推荐
相关产品推荐

