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

在R中读取结构不规则的制表符分隔.DAT文件

处理格式混乱的制表符分隔DAT文件

我需要读取一个本该是制表符分隔的.DAT文件,但实际结构比预期混乱。该文件应包含5列:

  • 1到正无穷的数值
  • 格式为MM/DD/YYYY的日期
  • 格式为HH:MM:SS或HH:MM的时间
  • 自由文本
  • 自由文本

通过readLines提取的文件片段如下:

c("12315\t01/01/1999\t22:31\tOther, specify - Test\tBILE TUCT", 
"UNKNOWN", 
"CONTRAINDICATION, STOP", 
"75\t01/28/2021\t19:34\tct\tBilateral (unable to cannulate), normal", 
"75\t07/01/2014\t15:01:02\tCT/MRI\tCT chest shows collapse...otherwise OKAY. ETT okay. ", 
"CT neg.  Left s w/1mm cyst.", 
"75\t06/13/2018\t14:30\tCardiac cath\tNormal A, EF 66%, no AS/MR"
)

期望输出为如下规范结构的表格:

V1V2V3V4V5
1231501/01/199922:31Other, specify - TestBILE TUCT, UNKNOWN, CONTRAINDICATION, STOP
7501/28/202119:34ctBilateral (unable to cannulate), normal
7507/01/201415:01:02CT/MRICT chest shows collapse...otherwise OKAY. ETT okay. CT neg. Left s w/1mm cyst.
7506/13/201814:30Cardiac cathNormal A, EF 66%, no AS/MR

解决方案

核心思路是先识别每条完整记录的起始行,再把后续属于同一条记录的多行内容合并到第5列,最后拆分制表符得到规范数据:

# 模拟读取的行数据
lines <- c("12315\t01/01/1999\t22:31\tOther, specify - Test\tBILE TUCT", 
           "UNKNOWN", 
           "CONTRAINDICATION, STOP", 
           "75\t01/28/2021\t19:34\tct\tBilateral (unable to cannulate), normal", 
           "75\t07/01/2014\t15:01:02\tCT/MRI\tCT chest shows collapse...otherwise OKAY. ETT okay. ", 
           "CT neg.  Left s w/1mm cyst.", 
           "75\t06/13/2018\t14:30\tCardiac cath\tNormal A, EF 66%, no AS/MR"
)

# 识别记录起始行:以数字+制表符开头的行是每条记录的第一行
start_rows <- grepl("^\\d+\t", lines)

# 为每行分配组ID,把同一条记录的行归为一组
group_ids <- cumsum(start_rows)

# 按组合并行,用逗号分隔多行内容
combined_lines <- tapply(lines, group_ids, function(x) paste(x, collapse = ", "))

# 拆分制表符并转换为数据框
library(data.table)
result <- fread(paste(combined_lines, collapse = "\n"), sep = "\t", col.names = paste0("V", 1:5))

# 查看结果
print(result)

代码说明:

  • grepl("^\\d+\t", lines):匹配以数字加制表符开头的行,确定每条记录的起始位置
  • cumsum(start_rows):生成连续的组ID,让同一条记录的所有行拥有相同ID
  • tapply按组合并行,把原本拆分到多行的第5列内容合并成一个字符串
  • 最后用fread读取合并后的文本,自动按制表符拆分得到规范的5列数据框

内容的提问来源于stack exchange,提问作者afleishman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:03:12