R语言变量重命名:移除数字前缀并将数字移至末尾
问题与解决方案
问题说明
现有R语言数据框DATA:
DATA = data.frame(a1trt = c(1,2), a2trt = c(5,9), b1for = c(0,9), b2for=c(5,6), b3for = c(NA,8))
需对所有变量名执行如下修改:移除数字前的所有内容,并将数字移至变量名末尾,最终得到如下WANT数据框的格式:
WANT = data.frame(trt1 = c(1,2), trt2 = c(5,9), for1 = c(0,9), for2=c(5,6), for3 = c(NA,8))
实现方法
基础R方式
通过正则表达式匹配并替换列名,无需额外安装包:
# 提取原列名并执行正则替换 new_colnames <- gsub("^.*?(\\d+)(.*)$", "\\2\\1", colnames(DATA)) # 为数据框赋予新列名 colnames(DATA) <- new_colnames # 验证结果 print(DATA)
正则表达式逻辑:
^.*?(\\d+)(.*)$:非贪婪匹配开头到第一个数字前的所有内容,捕获数字部分(\\d+)和数字后的剩余内容(.*)\\2\\1:将捕获的数字后内容与数字调换位置,得到目标列名
tidyverse(dplyr)方式
如果日常使用tidyverse工具链,可通过rename_with函数快速实现:
library(dplyr) DATA <- DATA %>% rename_with(function(x) gsub("^.*?(\\d+)(.*)$", "\\2\\1", x))
内容的提问来源于stack exchange,提问作者bvowe
相关产品推荐
相关产品推荐

