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

如何在R中使用fread读取带时间戳的最新数据集?

自动读取带时间戳的最新数据集(支持日期/时间戳判断)

下面提供两种实用的实现方式,都能自动识别文件名中的时间戳(不管是日度带时分的log_metricsYYYYMMDDHHMM,还是未来的月度log_metricsYYYYMM格式),并读取最新的文件:

方法一:Base R + data.table

无需额外安装包,用基础R函数结合data.table::fread即可实现:

library(data.table)

# 定义目标文件夹路径
dir_path <- "data/generated_metrics/"

# 筛选出符合命名规则的文件(log_metrics开头,后跟纯数字时间戳)
metric_files <- list.files(
  path = dir_path,
  pattern = "^log_metrics\\d+$",
  full.names = TRUE
)

# 空文件检查,避免无匹配文件时报错
if (length(metric_files) == 0) {
  stop("目标文件夹中未找到符合规则的数据集文件")
}

# 解析文件名中的时间戳为可比较的日期/时间对象
parse_timestamp <- function(ts) {
  n_char <- nchar(ts)
  switch(
    as.character(n_char),
    "6" = as.Date(paste0(ts, "01"), format = "%Y%m%d"),  # 月度格式YYYYMM
    "8" = as.Date(ts, format = "%Y%m%d"),                # 日度格式YYYYMMDD
    "12" = as.POSIXct(ts, format = "%Y%m%d%H%M", tz = "UTC"),  # 时分格式YYYYMMDDHHMM
    stop("不支持的时间戳长度:", n_char)
  )
}

# 提取时间戳并转换格式
timestamps <- sub("^log_metrics(\\d+)$", "\\1", basename(metric_files))
file_dates <- sapply(timestamps, parse_timestamp)

# 定位最新文件并读取
latest_file <- metric_files[which.max(file_dates)]
latest_data <- fread(latest_file)

方法二:fs包(更简洁的文件操作)

fs包提供了更直观的文件系统操作函数,代码可读性更强:

library(fs)
library(data.table)
library(stringr)

dir_path <- "data/generated_metrics/"

# 筛选符合规则的文件
metric_files <- dir_ls(dir_path, regexp = "^log_metrics\\d+$")

if (length(metric_files) == 0) {
  stop("未找到匹配的数据集文件")
}

# 复用时间戳解析函数
parse_timestamp <- function(ts) {
  n_char <- nchar(ts)
  switch(
    as.character(n_char),
    "6" = as.Date(paste0(ts, "01"), format = "%Y%m%d"),
    "8" = as.Date(ts, format = "%Y%m%d"),
    "12" = as.POSIXct(ts, format = "%Y%m%d%H%M", tz = "UTC"),
    stop("不支持的时间戳长度:", n_char)
  )
}

# 提取时间戳并转换
timestamps <- path_file(metric_files) %>% str_remove("^log_metrics")
file_dates <- sapply(timestamps, parse_timestamp)

# 读取最新文件
latest_file <- metric_files[which.max(file_dates)]
latest_data <- fread(latest_file)

注意事项

  • 若未来新增其他时间戳格式(比如YYYYMMDDHH),只需在parse_timestamp函数中添加对应的长度判断和格式转换规则即可
  • 代码基于文件名中的时间戳判断新旧,而非文件的系统修改时间,完全符合"结合日期和时间戳判断"的要求
  • 加入了空文件检查逻辑,避免因文件夹无匹配文件导致的运行错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:22:59