You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将readxl导入生成的带...数字后缀的重名列修改为字母后缀格式

readxl同名列后缀格式转换实现方案

你原有代码的错误有两处:

  1. str_replace的替换参数不会解析正则匹配规则,你写的[:alpha:][:digit:][:digit:]会被直接当成普通文本输出,自然无法保留原有前缀。
  2. 正则中的.是通配符,要匹配字面量的三个点后缀,需要转义为\\.,避免误匹配其他任意字符。

以下是匹配你需求的最简实现代码:

library(stringr)
string <- c("G01","G01...2","G02","G03","G04","G04...6","G05","G05...8")
# 用捕获组保留前缀,替换三个点加数字的后缀为A
result <- str_replace(string, "^([:alpha:][:digit:]{2})\\.{3}\\d+$", "\\1A")
print(result)
# 输出结果和预期一致:
# [1] "G01"  "G01A" "G02"  "G03"  "G04"  "G04A" "G05"  "G05A"

如果存在超过2个同名列的场景(比如G01...3需要转为G01B),可以使用如下扩展方案:

# 多同名列适配方案
string_multi <- c("G01","G01...2","G01...3","G02","G02...5")
result_multi <- str_match(string_multi, "^([:alpha:][:digit:]{2})(\\.{3}(\\d+))?$") |>
  as.data.frame() |>
  # 把readxl追加的序号转换为字母索引
  transform(suffix_idx = ifelse(is.na(V3), 0, as.integer(V4) - 1)) |>
  transform(col_name = ifelse(suffix_idx == 0, V1, paste0(V1, LETTERS[suffix_idx]))) |>
  `[[`("col_name")

print(result_multi)
# 输出:[1] "G01"  "G01A" "G01B" "G02"  "G02A"

内容的提问来源于stack exchange,提问作者outofthegreen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:09:00