在R语言中批量重命名以a_b_开头的列名
解决批量重命名以
a_b_开头的列名问题 先构造示例数据框方便测试:
library(dplyr) df <- tibble( x_y_z = 1:3, a_b_c = 4:6, a_b_d = 7:9, a_b_e = 10:12, a_b_f = 13:15 )
你的原代码有两个关键错误:
substr(df, 5,5)错误传入了整个数据框,rename_with的第二个参数需要接收列名字符串作为输入,要用.x指代当前列名;starts_with(a_b\_)中的匹配字符串未加引号,R会将其识别为对象而非字符串,需改为starts_with("a_b_")。
正确写法1:用substr截取(适合固定长度前缀)
因为a_b_是4个字符,从第5位开始截取到末尾即可保留最后一个字符:
df_renamed <- df %>% rename_with(~substr(.x, 5, nchar(.x)), starts_with("a_b_"))
正确写法2:用正则替换(更通用)
用正则表达式替换掉开头的a_b_,无论后续字符长度都能适用:
df_renamed <- df %>% rename_with(~sub("^a_b_", "", .x), starts_with("a_b_"))
运行后列名将变为x_y_z、c、d、e、f,完全符合需求。
内容的提问来源于stack exchange,提问作者Hennie Scholtz
相关产品推荐
相关产品推荐

