📅  最后修改于: 2023-12-03 15:23:17.356000             🧑  作者: Mango
在 R 编程中,有时我们需要将向量元素中的数字字符串填充到固定的位数,并添加前导零。这在日期格式化和数值格式化等情况下尤为常见。R 中有两个函数可以实现这一目的,分别是 paste0() 和 sprintf() 函数。下面分别介绍它们的用法。
paste0()
函数可以将字符串拼接起来,并用指定的分隔符连接。同时,它也可以将数字转换为字符型。对于添加前导零的需求,我们可以利用它在前面添加 0 ,然后再去掉多余的部分。下面是示例代码:
# 生成一个随机的数字向量
num_vec <- sample(1:99, 5)
# 用 paste0() 函数添加前导零
num_str_vec <- paste0("0", num_vec)
# 去掉多余的部分
num_str_vec <- substr(num_str_vec, nchar(num_str_vec) - 1, nchar(num_str_vec))
num_vec
#> [1] 68 11 5 16 96
num_str_vec
#> [1] "68" "11" "05" "16" "96"
上述代码中,我们使用 sample(1:99, 5) 生成了一个长度为 5 的随机数向量 num_vec 。接着,使用 paste0("0", num_vec)
将 num_vec 中的元素每个前面加上了一个 0 。这样我们就得到了一个元素都为字符型的向量 num_str_vec 。最后,使用 substr(num_str_vec, nchar(num_str_vec) - 1, nchar(num_str_vec))
去掉多余的 0。
sprintf()
函数是格式化输出函数,它可以创建具有居中、左对齐、右对齐等格式的字符串。和 paste0()
函数一样,它也可以将数字转换为字符型。下面是利用 sprintf()
函数添加前导零的示例代码:
# 生成一个数字向量
num_vec <- sample(1:99, 5)
# 用 sprintf() 函数添加前导零
num_str_vec <- sprintf("%02d", num_vec)
num_vec
#> [1] 76 83 25 19 44
num_str_vec
#> [1] "76" "83" "25" "19" "44"
上述代码中,我们使用 sprintf("%02d", num_vec)
将 num_vec 中的元素转换为字符串并每个前面补上一个 0 ,宽度为 2 个字符。这样我们就得到了一个元素都为字符型的向量 num_str_vec 。
我们可以看到,使用 paste0()
函数和使用 sprintf()
函数都可以方便的为数字添加前导零。其中, sprintf()
函数更为简单和灵活,建议优先使用它。