如何用循环批量从多个df_x数据框提取指定单元格数据到new_df?
批量提取多个DataFrame指定单元格数据的R实现
方案一:使用列表 + lapply(推荐,更高效)
- 收集所有目标DataFrame到列表
从全局环境中筛选出所有命名为df_1、df_2...的DataFrame,统一存入列表:
# 匹配所有以df_开头+数字的对象 df_list <- mget(ls(pattern = "^df_\\d+$")) # 按数字顺序排序(确保和文件导入顺序一致) df_list <- df_list[order(as.integer(sub("df_", "", names(df_list))))]
- 批量提取指定单元格
定义提取函数,用lapply遍历列表每个元素,提取第13行的第2、4、6列数据:
extract_target <- function(df) { c(df[13, 2], df[13, 4], df[13, 6]) } extracted_rows <- lapply(df_list, extract_target)
- 转换为新DataFrame
将提取结果合并为最终的new_df,并设置列名:
new_df <- do.call(rbind, extracted_rows) colnames(new_df) <- c("自定义列名1", "自定义列名2", "自定义列名3") # 替换为实际列名
方案二:使用for循环(适合新手理解)
如果更习惯循环逻辑,可以用以下代码:
# 初始化空DataFrame new_df <- data.frame(matrix(ncol = 3, nrow = 0)) colnames(new_df) <- c("自定义列名1", "自定义列名2", "自定义列名3") # 获取排序后的目标DataFrame名称 df_names <- ls(pattern = "^df_\\d+$") df_names <- df_names[order(as.integer(sub("df_", "", df_names)))] # 循环提取并添加行 for (name in df_names) { current_df <- get(name) new_row <- c(current_df[13, 2], current_df[13, 4], current_df[13, 6]) new_df <- rbind(new_df, new_row) }
关键优势
- 后续新增Excel文件时,只要生成的DataFrame命名符合
df_数字格式,代码会自动纳入处理,无需手动修改。 - 避免手动重复代码带来的拼写错误和遗漏。
内容的提问来源于stack exchange,提问作者Cory Dowd
相关产品推荐
相关产品推荐

