如何在R中过滤不规则行并将大固定宽文本转为数据框?
解决方案
核心思路
先过滤掉不符合格式的坏行,只保留以12位连续字符(识别号)开头且**长度达标(约1800字符)**的行,再用原有逻辑处理剩余内容。
修改后的代码
# 读取文件所有行 df1 <- readLines("txtfile.txt") # 过滤坏行:保留行首12位为连续字符、且长度≥1800的行 # 若识别号是纯数字,可把正则替换为"^\\d{12}" filtered_lines <- df1[grepl("^.{12}", df1) & nchar(df1) >= 1800] # 用过滤后的行执行原有处理逻辑 df2 <- read.table(text=gsub("(.{1800})", "\\1 ", filtered_lines, perl=TRUE), header = FALSE, sep = "\r") df3 <- separate(df2, V1, c('all my columns names'), sep = c(20, 62 , 85, etc), remove = TRUE, convert = TRUE)
关键说明
grepl("^.{12}", df1):精准匹配行首前12位为连续非换行字符的行,对应你提到的12位识别号开头规则;如果识别号是纯数字,改用^\\d{12}能进一步提升过滤精度。nchar(df1) >= 1800:额外过滤长度不足的行,避免后续按固定位置分割时出现格式错误。- 先过滤再处理,就能跳过所有随机出现的坏行,顺利读取完整文件。
内容的提问来源于stack exchange,提问作者ckwoff
相关产品推荐
相关产品推荐

