如何在DataFrame列的文本间插入字符并补零格式化?
处理DataFrame文本插入字符并格式化的解决方案
问题场景
原始DataFrame定义如下:
df = data.frame(Clock = c("78", "89", "910", "1011"))
原始数据:
| Clock |
|---|
| 78 |
| 89 |
| 910 |
| 1011 |
需要将Clock列格式化为两位一组的补零形式,最终期望结果:
| Clock |
|---|
| 0708 |
| 0809 |
| 0910 |
| 1011 |
解决方案
方法一:基于字符串长度的条件处理
通过判断每个字符串的长度,拆分后补零拼接,逻辑直观易懂:
df$Clock <- sapply(df$Clock, function(x) { char_len <- nchar(x) if (char_len == 2) { # 拆分单个数字,补零后拼接 sprintf("%02d%02d", as.numeric(substr(x, 1, 1)), as.numeric(substr(x, 2, 2))) } else if (char_len == 3) { # 拆分为1位和2位,补零后拼接 sprintf("%02d%02d", as.numeric(substr(x, 1, 1)), as.numeric(substr(x, 2, 3))) } else { # 4位长度直接保留 x } })
方法二:正则表达式分组处理
利用正则捕获分组,一次性匹配不同长度的字符串,再统一补零拼接:
library(stringr) df$Clock <- str_replace(df$Clock, "^(\\d{1,2})(\\d{2})$", function(match) { sprintf("%02d%02d", as.numeric(match[2]), as.numeric(match[3])) })
验证结果
执行上述代码后,输出处理后的DataFrame:
print(df) # Clock # 1 0708 # 2 0809 # 3 0910 # 4 1011
内容的提问来源于stack exchange,提问作者Fadhil Dzikri
相关产品推荐
相关产品推荐

