求助:使用read.table导入含中间表头的多文件时跳过异常行
解决带次级表头的TXT数据合并问题
我需要合并20个10列的TXT格式数据文件,部分文件在第1400行之后存在次级表头,导致该行元素数量不符,合并时触发报错。
原代码及报错信息
原合并代码如下:
data_path <- "/Users/datalocation/" filenames <- list.files(data_path, full.names = F, pattern = "*myfile*", recursive = TRUE) selectfl1a <- function(x) {out <- read.table(x, col.names = ColNames, colClasses = c(rep("numeric", 4), rep("NULL", 6)))} test <- lapply(filenames, selectfl1a) %>% cbind() # 此处触发错误 testdf <- as.data.frame(t(test)) colnames(testdf) <- filenames rowtest <- lapply(filenames, selectfl1a) %>% bind_rows(.id="id")
报错内容:
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, :
scan() expected 'a real', got 'CURVE2'
尝试过的方法及问题
- 用
grep("[[:alpha]]")过滤含字母的行,但保留列的科学计数法数值、被过滤列的点号字符串被误判,导致所有内容被过滤。 - 尝试
fill=TRUE无效,因为colClasses强制前4列为数值型;去掉该参数则cbind无法运行。 - 考虑用
colClasses = c(rep("character", 4), rep("NULL",6))读取,但不确定如何转回数值型。
解决方案
可以先以字符型读取数据,过滤掉无法转为数值的行(即次级表头行),再转回数值型,保留原导入结构:
data_path <- "/Users/datalocation/" # 修正:full.names设为TRUE,确保read.table能找到文件路径 filenames <- list.files(data_path, full.names = TRUE, pattern = "*myfile*", recursive = TRUE) # 自定义读取函数 selectfl1a <- function(x) { # 以字符型读取前4列,fill=TRUE避免行元素数不符报错 raw_data <- read.table(x, colClasses = c(rep("character", 4), rep("NULL", 6)), fill = TRUE, stringsAsFactors = FALSE) # 过滤有效行:仅保留前4列都能转为数值的行 valid_rows <- apply(raw_data, 1, function(row) { # suppressWarnings忽略转数值时的警告(表头行转数值会触发,但会被过滤) all(!is.na(suppressWarnings(as.numeric(row)))) }) # 将过滤后的字符列转为数值型 clean_data <- as.data.frame(lapply(raw_data[valid_rows, ], as.numeric), stringsAsFactors = FALSE) # 设置列名(若你已有ColNames,取前4列即可;无则直接定义) colnames(clean_data) <- ColNames[1:4] # 若未定义ColNames,可替换为:colnames(clean_data) <- c("Pt", "T", "Vf", "Im") return(clean_data) } # 批量读取并合并,生成带id标识的4列数据集 rowtest <- lapply(filenames, selectfl1a) %>% dplyr::bind_rows(.id = "id")
方法说明
- 字符型读取:先用字符型读取前4列,避免次级表头行因无法转为数值直接报错。
- 过滤无效行:通过检查每行是否能全部转为数值,精准剔除次级表头行,不会误删含科学计数法的有效数据。
- 转回数值型:将过滤后的字符列统一转为数值型,保证后续合并的结构符合需求,
bind_rows可正常运行。
内容的提问来源于stack exchange,提问作者Lina Bird
相关产品推荐
相关产品推荐

