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

如何在R语言中批量替换数据框列名(多模式匹配)

批量替换数据框列名前缀

需求说明

需要对数据框的列名进行多模式批量替换:将「Qx_题型」格式(如Q1_multiple_choice)的列名前缀(Q1、Q2…Q50)替换为对应新名称(如Math、Science等),列无固定顺序,需支持批量替换规则。

测试数据生成

test_col_names <- 
  paste0("Q", 
         sample.int(5, 20, replace = TRUE), 
         "_", 
         sample(c(
           "multiple_choice", "true_false", "fill_in"
         ), 20, replace = TRUE))
df <- data.frame(matrix(nrow = 0, ncol = length(test_col_names)))
colnames(df) <- test_col_names
df

问题分析

之前尝试的代码仅替换部分列名,原因是str_replace_all传入向量的写法不符合参数要求,该函数需要命名列表来定义多模式替换规则。

解决方案

方法1:直接使用命名列表定义替换规则

利用str_replace_all支持命名列表的特性,为每个前缀添加正则开头锚定符^,确保只匹配列名开头的前缀,避免误替换。

library(dplyr)
library(stringr)

# 定义批量替换规则(可扩展至Q1-Q50)
new_names <- list(
  "^Q1" = "Math",
  "^Q2" = "Science",
  "^Q3" = "History",
  "^Q4" = "English",
  "^Q5" = "PE"
)

# 执行替换
df <- df %>% 
  set_names(~ str_replace_all(., new_names))

方法2:从数据框导入替换规则

如果替换规则存储在数据框(如从外部文件导入),可先将其转换为符合要求的命名列表:

# 示例替换规则数据框
name_mapping <- data.frame(
  old_prefix = paste0("Q", 1:5),
  new_prefix = c("Math", "Science", "History", "English", "PE")
)

# 转换为带正则锚定的命名列表
new_names_list <- setNames(
  name_mapping$new_prefix, 
  paste0("^", name_mapping$old_prefix)
)

# 执行替换
df <- df %>% 
  set_names(~ str_replace_all(., new_names_list))

验证结果

执行后可通过colnames(df)查看替换后的列名,例如Q1_multiple_choice会变为Math_multiple_choice,所有符合规则的前缀都会被批量替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:31:04