R语言基于命名向量或映射数据框修改dataframe列名的实现方法
R语言实现DataFrame列名按映射表替换
首先可以先运行以下代码构造示例数据,方便复现测试:
# 构造原始数据框 df <- data.frame( a = rep(1,4), b = rep(1,4), c = rep(1,4), d = rep(1,4), e = rep(1,4), f = rep(1,4), g = rep(1,4), h = rep(1,4), i = rep(1,4), j = rep(1,4) ) # 构造映射关系表 map_df <- data.frame( sample = c("a","b","c","d","e","f","g","h","i","j"), name = 1:10 )
方法1:基础R实现
无需加载第三方包,直接通过match函数按值匹配列名和映射关系即可,不依赖映射表和原始列的排列顺序:
colnames(df) <- map_df$name[match(colnames(df), map_df$sample)]
如果存在原始列名不在映射表中的情况,match会返回NA,你可以提前过滤掉不需要的列,或者为NA位置自定义默认列名。
方法2:tidyverse(dplyr)实现
如果你已经在使用tidyverse技术栈,可以用rename_with函数实现,适配管道流写法:
library(dplyr) df <- df %>% rename_with(~ map_df$name[match(.x, map_df$sample)], everything())
运行完成后可通过以下代码验证结果:
print(colnames(df)) # 预期输出: [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
内容的提问来源于stack exchange,提问作者Gabriel G.
相关产品推荐
相关产品推荐

