R中使用lapply读取多个文本文件并合并为单个数据框的问题
R语言批量合并txt文件提取指定列解决方案
注意事项
你现有代码存在两处可调整的点:
- 匹配文件的正则写法不严谨,
pattern = "*.txt"可能误命中文件名中间含txt的文件,改为pattern = "\\.txt$"可精准匹配后缀为.txt的文件 - 你示例数据里的数值列列名为
Inc,原代码里的df$IncLevelDifference是不存在的列,会返回空值,需替换为你实际的列名,按示例就是df$Inc
基础R方案(无需安装额外包)
直接将lapply返回的列表通过do.call(rbind, 列表对象)按行拼接即可得到总数据框:
files <- list.files(path = baseDir, pattern = "\\.txt$",full.names = TRUE, recursive = FALSE) df_list <- lapply(files, function(x){ a = basename(x) a = gsub("\\.txt$","",a) df <- read.table(x, header = TRUE, sep ="\t") newDF <- data.frame(type = a, inc = df$Inc) }) # 合并所有子数据框 final_df <- do.call(rbind, df_list)
得到的final_df就是你需要的总数据框,可直接在循环外调用。
tidyverse方案(代码更简洁)
如果使用purrr包的map_dfr函数,会自动按行合并所有返回的结果,无需手动拼接:
library(purrr) library(readr) files <- list.files(path = baseDir, pattern = "\\.txt$",full.names = TRUE, recursive = FALSE) final_df <- map_dfr(files, function(x){ file_prefix <- gsub("\\.txt$", "", basename(x)) df <- read_tsv(x, show_col_types = FALSE) return(data.frame(type = file_prefix, inc = df$Inc)) })
内容的提问来源于stack exchange,提问作者user3138373
相关产品推荐
相关产品推荐

