如何使用while循环对多个数据框执行rbind合并操作?
问题原因
你的猜测完全正确,paste0("test", i)生成的是字符串类型的变量名,不是实际加载在环境中的数据框对象,直接传给rbind相当于把字符串和数据框做行合并,类型不匹配自然会报错。
修正方案
方案1:修改原有循环逻辑
只需要用get()函数把字符串对应的实际对象取出即可,修正后的循环代码如下:
library(dplyr) test = as.data.frame(matrix(ncol = 3, nrow = 0)) %>% setNames(c("num", "source", "target")) i=1 while (i < 11) { test = rbind(test, get(paste0("test", i))) i = i + 1 }
方案2:更高效的向量化写法(推荐)
循环逐次绑定会频繁复制数据,数据量大的时候效率很低,推荐先把所有数据框汇总为列表,再一次性合并:
library(dplyr) # 批量取出10个数据框存入列表 df_list <- lapply(paste0("test", 1:10), get) # 一次性合并所有数据框 test <- bind_rows(df_list)
如果不用dplyr,基础R也可以实现相同效果:
df_list <- lapply(paste0("test", 1:10), get) test <- do.call(rbind, df_list)
内容的提问来源于stack exchange,提问作者Caio Scaravajar
相关产品推荐
相关产品推荐

