R语言如何迭代合并同年度前缀的命名字符向量为年度汇总向量
核心问题说明
你自己判断的问题点是对的:paste0()生成的只是变量名的字符串,不会自动读取对应变量存储的内容,需要用get()函数根据变量名字符串提取值。除此之外你原代码还有两处语法错误:for循环的表达式里缺少in关键字、序号范围的括号写法错误。
实现方案
方案1:基于你的原有循环逻辑修改
如果你习惯用循环的写法,可以直接按下面的代码调整,增加了变量存在性判断,不会因为序号超过实际数量报错:
for (i in c(20,21)) { # 生成年份前缀 year_prefix <- paste0("text_20", i) # 初始化汇总向量 merged <- c() for (j in 1:400) { # 生成单条变量名 current_var <- paste0(year_prefix, "_", formatC(j, width = 3, flag = "0")) # 变量存在才合并 if (exists(current_var)) { merged <- c(merged, get(current_var)) } } # 赋值给最终的年份汇总变量 assign(year_prefix, merged) }
方案2:更简洁的自动匹配方案
不用手动指定序号上限,直接从全局环境中匹配对应年份的所有符合命名规则的变量,容错率更高:
# 填入你要处理的所有年份 target_years <- c(2020, 2021) for (y in target_years) { # 匹配当前年份所有符合text_年份_序号格式的变量名 matched_vars <- ls(pattern = paste0("^text_", y, "_\\d{3}$")) # 批量读取所有变量内容并合并 year_result <- unlist(lapply(matched_vars, get)) # 赋值给汇总变量 assign(paste0("text_", y), year_result) }
如果你需要严格保证向量按序号从小到大的顺序合并,把
matched_vars替换成sort(matched_vars)即可。
内容的提问来源于stack exchange,提问作者Etienne Brossard
相关产品推荐
相关产品推荐

