R语言批量重命名数据框列:提取原列数字+保留other标识
R批量重命名数据框列:提取数字+保留other标识+添加前缀
解决方案代码
# 安装并加载必要包(首次使用需先安装) # install.packages(c("dplyr", "stringr")) library(dplyr) library(stringr) # 构造示例数据集(设置随机种子确保结果可复现) set.seed(123) df_toy <- data.frame( ID = 1:20, "variable 1 - language" = sample(1:4, 20, replace = TRUE), "variable 1 - other" = sample(1:7, 20, replace = TRUE), "variable 2 - math" = sample(1:5, 20, replace = TRUE), "question 4 - writing" = sample(1:20, 20, replace = TRUE), "question 4 other" = NA, check.names = FALSE ) # 核心重命名逻辑(使用管道操作符) df_renamed <- df_toy |> rename_with( .cols = -ID, # 跳过ID列,不对其重命名 .fn = \(col_name) { # 从列名中提取数字部分 item_num <- str_extract(col_name, "\\d+") # 根据是否包含"other"拼接新列名 if (grepl("other", col_name, ignore.case = TRUE)) { paste0("item_", item_num, " other") } else { paste0("item_", item_num) } } ) # 查看重命名后的列名 colnames(df_renamed)
代码说明
- 跳过指定列:通过
.cols = -ID排除不需要重命名的ID列,仅处理目标列 - 提取数字:利用
str_extract配合正则表达式\\d+,精准匹配列名中的连续数字 - 保留other标识:用
grepl检测列名是否包含"other"(忽略大小写适配不同写法),匹配成功则在数字后追加" other",否则直接生成item_数字格式的列名
执行结果
运行代码后,df_renamed的列名将变为:ID、item_1、item_1 other、item_2、item_4、item_4 other,完全符合需求。
内容的提问来源于stack exchange,提问作者Michael Matta
相关产品推荐
相关产品推荐

