R语言如何删除列名字符串冗余内容仅保留末尾数字
解决方案
原Session向量定义存在语法问题:"Evidims_01_003_2"后缺少逗号,修正后可使用以下两种方案提取末尾数字:
# 修正后的测试数据 Session <- c("Evidims_01_001_1", "Evidims_01_001_2", "Evidims_01_001_3", "Evidims_01_002_1", "Evidims_01_002_2", "Evidims_01_003_1", "Evidims_01_003_2", "Evidims_01_003_3", "Evidims_01_003_4", "Evidims_01_004_1")
方法1:Base R 实现(无需安装额外依赖)
通过正则匹配替换掉前缀,仅保留末尾数字:
new_session_names <- sub(".*_(\\d)$", "\\1", Session)
- 正则逻辑:
.*_匹配从字符串开头到最后一个下划线的所有内容,(\\d)$捕获字符串末尾的单个数字,最终替换为捕获到的数字即可。
方法2:stringr 包实现(语法更直观)
如果你常用tidyverse生态,可以用stringr的提取函数直接匹配末尾数字:
# 首次使用需先安装:install.packages("stringr") library(stringr) new_session_names <- str_extract(Session, "\\d$")
扩展适配
如果后续年份后缀可能出现多位数字(比如第10年对应后缀10),只需要调整正则即可兼容:
- Base R 版本:
sub(".*_(\\d+)$", "\\1", Session) - stringr 版本:
str_extract(Session, "\\d+$")
如果你需要直接修改数据框的列名,假设你的数据框名为df,直接运行以下代码即可:
colnames(df) <- sub(".*_(\\d)$", "\\1", colnames(df))
内容的提问来源于stack exchange,提问作者EGF1
相关产品推荐
相关产品推荐

