求教:如何在R中按规则跳过不同行数读取多文件夹下的TXT文件
解决方案:动态跳过前置行读取多TXT文件
核心思路
先定位每个文件中*/的行号,从该行的下一行开始读取数据;同时统一温度列的名称,适配不同文件的列名、列数及顺序差异。
具体代码实现
步骤1:加载依赖包
library(tidyverse)
步骤2:定义单文件读取函数
read_custom_txt <- function(file_path) { # 读取文件所有行,定位*/所在的最后一行 all_lines <- readLines(file_path) end_comment_line <- max(which(str_detect(all_lines, "\\*/"))) # 从注释结束的下一行读取数据,识别表头 df <- read.table(file_path, skip = end_comment_line, header = TRUE, stringsAsFactors = FALSE) # 统一温度列名称:匹配含"Temp"的列(忽略大小写),重命名为temperature temp_col_index <- grep("Temp", names(df), ignore.case = TRUE) if (length(temp_col_index) > 0) { names(df)[temp_col_index] <- "temperature" } return(df) }
步骤3:批量读取多文件夹内的TXT文件
# 替换为你的根文件夹路径,递归遍历所有子文件夹的TXT文件 txt_files <- list.files(path = "你的根文件夹路径", pattern = "\\.txt$", recursive = TRUE, full.names = TRUE) # 批量读取并合并所有数据(若需保留单个文件数据,改用lapply) all_merged_data <- map_dfr(txt_files, read_custom_txt, .id = "file_source")
代码说明
- 用
readLines+str_detect精准定位注释结束行,避免固定skip值的局限性; - 自动识别表头,适配不同文件的列数与列顺序;
- 通过模糊匹配温度列名并统一重命名,确保所有文件的温度列名称一致;
list.files(recursive = TRUE)会遍历所有子文件夹的TXT文件,map_dfr将数据合并为单个数据框并保留文件来源信息。
内容的提问来源于stack exchange,提问作者Alexia k Boston
相关产品推荐
相关产品推荐

