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

如何在读取CSV时跳过行直至首列出现'Date Time'?

实现自动定位表头行读取CSV文件

要实现跳过行直到检测到首列列名为'Date Time'的行再读取数据,可以先逐行扫描文件定位目标行,再读取数据。具体操作如下:

  • 先用readLines()读取整个文件的所有行,避免提前解析为数据框。
  • 遍历每行内容,拆分后检查首元素是否为'Date Time',记录对应的行号。
  • 用read.csv()读取时,设置skip为目标行号减1(跳过前面所有无关行),并将目标行作为表头。

修改后的代码如下:

# Read troll data in
trollFiles <- list.files(pattern="_2019.csv")

dataList <- list()
baroList <- list()

for (var in trollFiles) {
  filepath <- file.path(var)
  fileName <- substr(var, 1, nchar(var)-4)
  
  # 定位包含'Date Time'的表头行
  all_lines <- readLines(filepath)
  skip_rows <- 0
  for (i in seq_along(all_lines)) {
    line_parts <- strsplit(all_lines[i], "\\s+")[[1]]
    if (length(line_parts) > 0 && line_parts[1] == 'Date Time') {
      skip_rows <- i - 1
      break
    }
  }
  
  # 从目标表头行开始读取数据
  file <- read.csv(filepath, sep="", header=TRUE, check.names=FALSE, skip=skip_rows)
  colnames(file) <- c('DateTime', 'Pressure', 'Temperature')
  file$Pressure <- as.numeric(file$Pressure)
  file$Temperature <- as.numeric(file$Temperature)
  
  # 分类存入对应列表
  if (fileName == 'baro_2019') {
    baroList[[fileName]] <- file
  } else {
    dataList[[fileName]] <- file
  }
}

补充说明

  • strsplit(all_lines[i], "\\s+")用正则匹配任意空白字符拆分行内容,和read.csv(sep="")的行为一致,确保拆分规则统一。
  • 如果文件中不存在'Date Time'行,代码会保持skip_rows=0直接读取第一行,可根据需求添加错误提示逻辑。
  • 原代码中file.path(paste(var))简化为file.path(var),单参数时file.path直接返回目标路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 23:47:13