You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用循环在R中导入多个txt文件并生成独立DataFrame

解决R语言批量导入txt文件生成独立DataFrame的问题

核心需求实现方案

要实现每个文件生成独立DataFrame、添加数据来源标识列、完成数据格式化,可按以下步骤操作:

1. 准备依赖包

确保已安装并加载readr和purrr包(未安装则先执行安装命令):

install.packages(c("readr", "purrr"))
library(readr)
library(purrr)

2. 批量处理完整代码

# 设置目标文件路径
input_all_data <- "你的文件路径"

# 获取所有txt文件的完整路径(精准匹配后缀)
dflist <- list.files(path = input_all_data, pattern = "\\.txt$", full.names = TRUE)

# 定义单个文件的处理逻辑
process_single_file <- function(file_path) {
  # 读取文件,指定列名、数据类型,跳过前5行
  df <- read_csv(
    file_path,
    col_names = c('Frequency', 'Impedance', 'Admittance', 'Phase', 
                  'Resistance', 'Reactance', 'Conductance', 'Susceptance'),
    col_types = cols(
      col_number(), col_number(), col_number(), col_number(),
      col_number(), col_number(), col_number(), col_number()
    ),
    skip = 5
  ) %>%
    # 添加数据来源列(提取纯文件名,去掉路径和后缀)
    mutate(Filename = basename(file_path) %>% tools::file_path_sans_ext()) %>%
    # 移除缺失值
    na.omit()
  
  return(df)
}

# 批量处理所有文件,得到包含多个DataFrame的列表
df_collection <- map(dflist, process_single_file)

# 给列表元素命名(用纯文件名作为DataFrame名称)
names(df_collection) <- dflist %>% basename() %>% tools::file_path_sans_ext()

# 可选:将每个DataFrame加载到全局环境,直接调用文件名即可访问
list2env(df_collection, envir = .GlobalEnv)

3. 代码逻辑说明

  • pattern = "\\.txt$":精准匹配以.txt结尾的文件,避免误匹配含txt字符的其他文件
  • process_single_file函数:封装单文件的读取、格式化、来源列添加、去缺失值操作,保证所有文件处理逻辑统一
  • map(dflist, process_single_file):遍历所有文件,生成对应独立DataFrame的列表,每个列表元素对应一个文件的处理结果
  • list2env:将列表中的DataFrame导出到全局环境,例如文件UW_APL_ES120-7CD_SN_123.txt会生成同名的DataFrame

4. 原代码问题修正

  • 第一段代码错误:先通过lapply读取文件,又在循环中重复用map_dfr合并,且for (i in length(myfiles))仅会执行一次循环,逻辑混乱
  • 第二段代码错误:map_dfr会将所有文件合并为单个DataFrame,不符合“生成独立DataFrame”的需求

内容的提问来源于stack exchange,提问作者Jackson A. Swan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:17:01