R语言循环中如何调用指定命名dataframe配合rbind完成数据合并
问题原因
paste0()生成的是字符串类型的对象名,并不是R环境中实际存储的dataframe对象,直接传入rbind()无法识别为数据对象,自然无法完成合并。你需要通过get()函数根据字符串名称提取环境中对应的实际数据对象。
另外你原循环中的拼接代码存在语法错误:paste0("df_", i "_1")漏了i后的逗号,正确写法为paste0("df_", i, "_1")。
修正后的循环实现
场景1:生成每个字母对应的合并后独立数据框
运行后会生成df_a、df_b、df_c三个分别合并后的独立数据框:
for (i in letters) { # 提取对应名称的两个dataframe,按行合并 merged_df <- rbind(get(paste0("df_", i, "_1")), get(paste0("df_", i, "_2"))) # 为合并结果赋值对应名称,存入当前环境 assign(paste0("df_", i), merged_df) }
场景2:所有数据框合并为一个总数据框
# 初始化空结果对象 total_df <- data.frame() for (i in letters) { temp_1 <- get(paste0("df_", i, "_1")) temp_2 <- get(paste0("df_", i, "_2")) total_df <- rbind(total_df, temp_1, temp_2) }
更高效的非循环实现(推荐)
如果不需要单独生成每个字母的合并结果,直接合并所有符合命名规则的数据框,可以用更简洁的向量式操作完成:
# 匹配所有符合命名规则的对象名,提取后一次性按行合并 total_df <- do.call(rbind, lapply(ls(pattern = "^df_[a-c]_[1-2]$"), get))
内容的提问来源于stack exchange,提问作者Andres Gonzalez
相关产品推荐
相关产品推荐

