如何批量复制并重命名R语言环境中的变量?
问题描述
我已经创建了若干变量,希望复制这些变量,让原变量和带Ireland_前缀的新变量同时存在。例如原变量c_PFS_Folfox <- 307.81,需要生成:
Ireland_c_PFS_Folfox <- 307.81
初始变量定义
1. 本国治疗成本
c_PFS_Folfox <- 307.81 c_PFS_Bevacizumab <- 2580.38 c_OS_Folfiri <- 326.02 administration_cost <- 365.00
2. 不良事件(AE)治疗成本(发生时)
c_AE1 <- 2835.89 c_AE2 <- 1458.80 c_AE3 <- 409.03
3. 支付意愿阈值
n_wtp = 45000
失败的尝试
我尝试批量重命名,但结果不符合预期,且新变量未出现在全局环境中:
kk <- data.frame(c_PFS_Folfox, c_PFS_Bevacizumab, c_OS_Folfiri, administration_cost, c_AE1, c_AE2, c_AE3, n_wtp) colnames(kk) <- paste("Ireland", kk, sep="_") kk
输出结果:
Ireland_307.81 Ireland_2580.38 Ireland_326.02 Ireland_365 Ireland_2835.89 Ireland_1458.8 1 307.8 2580 326 365 2836 1459 Ireland_409.03 Ireland_45000 1 409 45000
解决方案
问题根源
你之前的操作存在两个核心问题:
- 修改列名时错误使用了变量值(
kk是数据框本身,调用时取的是变量值),而非原变量名,导致新列名变成Ireland_加数值,不是预期的前缀加原变量名; - 数据框内的变量仅存在于数据框内部,不会自动同步到全局环境,所以你看不到新变量。
正确实现方法
方法1:列表+list2env批量生成
这是最简洁的批量处理方式:
# 定义需要复制的原变量名向量 var_names <- c("c_PFS_Folfox", "c_PFS_Bevacizumab", "c_OS_Folfiri", "administration_cost", "c_AE1", "c_AE2", "c_AE3", "n_wtp") # 将目标变量存入列表(保留原变量名) var_list <- mget(var_names) # 给列表元素添加Ireland_前缀 names(var_list) <- paste0("Ireland_", names(var_list)) # 将列表中的变量导出到全局环境 list2env(var_list, envir = .GlobalEnv)
方法2:循环+assign逐个创建
如果偏好直观的循环写法,可以用assign函数手动创建每个新变量:
var_names <- c("c_PFS_Folfox", "c_PFS_Bevacizumab", "c_OS_Folfiri", "administration_cost", "c_AE1", "c_AE2", "c_AE3", "n_wtp") for (name in var_names) { # 获取原变量的值 value <- get(name) # 创建带前缀的新变量并写入全局环境 assign(paste0("Ireland_", name), value, envir = .GlobalEnv) }
验证结果
执行上述任意方法后,可通过以下方式确认新变量:
# 查看所有带Ireland_前缀的变量 grep("^Ireland_", ls(), value = TRUE) # 验证单个新变量的值 Ireland_c_PFS_Folfox # 输出:307.81
内容的提问来源于stack exchange,提问作者James Moore
相关产品推荐
相关产品推荐

