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

如何快速重命名R数据框中需加引号引用的特殊格式变量

最优实现方案

你可以通过预定义特征映射规则+批量重命名函数的方式实现,无需逐条编写规则,后续新增特征也只需要更新映射表即可。

方案1:tidyverse 实现(推荐,和你当前用的dplyr语法兼容)

首先定义特征前缀和对应带括号格式的映射关系,再用dplyr::rename_with批量处理符合规则的列:

library(dplyr)
library(stringr)

# 步骤1:预定义特征映射规则,新增特征只需要修改这个向量即可
feature_map <- c(
  FeatureA = "FeatureA(100-150)",
  FeatureB = "FeatureB(200-400)",
  FeatureC = "FeatureC(200-800)",
  FeatureD = "FeatureD(800-1200)"
)

# 步骤2:批量重命名符合规则的列,不会影响SUBJECT、TREATMENT等其他列
data <- data %>%
  rename_with(
    .fn = ~ {
      prefix <- str_extract(.x, "^Feature[A-D]")
      loc_part <- str_extract(.x, "Loc\\d+$")
      paste0(feature_map[prefix], ".", loc_part)
    },
    .cols = matches("^Feature[A-D]_Loc\\d+$")
  )

方案2:基础R实现(无需加载第三方包)

如果你不想依赖tidyverse生态,可以用基础R的字符串处理函数实现:

# 同样先定义映射规则
feature_map <- c(
  FeatureA = "FeatureA(100-150)",
  FeatureB = "FeatureB(200-400)",
  FeatureC = "FeatureC(200-800)",
  FeatureD = "FeatureD(800-1200)"
)

# 筛选需要修改的列名
old_cols <- grep("^Feature[A-D]_Loc\\d+$", names(data), value = TRUE)
# 批量生成新列名
new_cols <- sapply(old_cols, function(x) {
  parts <- strsplit(x, "_")[[1]]
  paste0(feature_map[parts[1]], ".", parts[2])
})
# 替换列名
names(data)[match(old_cols, names(data))] <- new_cols

注意事项

重命名后的列名包含特殊符号,调用时需要用反引号或者引号包裹,示例:

# 两种调用方式都可
data$`FeatureA(100-150).Loc1`
data$"FeatureA(100-150).Loc1"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:45:07