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

如何在R语言中用tidyverse批量删除旧数据集文件

R语言自动清理数据集:保留最新3个文件,删除旧文件

需求说明

需要自动清理两类数据集文件(viewers by app和log metrics),仅保留每个类别下最新的3个文件,通过文件名中%Y%m%d%H%M格式的时间戳判断文件新旧,借助tidyverse生态工具实现。

解决方案

我们可以用fs包(tidyverse生态内的文件操作工具)结合dplyr来实现这个逻辑,步骤如下:

  1. 编写通用清理函数,传入文件前缀和目标路径,自动筛选并删除旧文件
  2. 分别调用函数处理两类文件

完整代码

library(tidyverse)
library(fs)

# 定义清理函数:保留最新n个文件,删除其余旧文件
clean_old_files <- function(file_prefix, target_dir, keep_n = 3) {
  # 1. 获取目标路径下所有匹配前缀的csv文件
  files <- dir_ls(target_dir, regexp = paste0("^", file_prefix, ".*\\.csv$"))
  
  if (length(files) <= keep_n) {
    message(paste("文件数量不足", keep_n, "个,无需清理"))
    return(invisible(NULL))
  }
  
  # 2. 提取文件名中的时间戳并转换为时间格式
  file_info <- files %>%
    as_tibble_col(column_name = "file_path") %>%
    mutate(
      file_name = path_file(file_path),
      # 提取时间戳部分:从前缀之后到.csv之前的字符串
      timestamp_str = str_remove(file_name, paste0("^", file_prefix)),
      timestamp_str = str_remove(timestamp_str, "\\.csv$"),
      # 转换为时间对象用于排序
      timestamp = ymd_hm(timestamp_str)
    ) %>%
    # 按时间戳倒序排列(最新的在前)
    arrange(desc(timestamp))
  
  # 3. 筛选出需要删除的文件(除了前keep_n个)
  files_to_delete <- file_info %>%
    slice((keep_n + 1):n()) %>%
    pull(file_path)
  
  # 4. 删除文件(测试阶段可替换为print(files_to_delete)确认目标文件)
  file_delete(files_to_delete)
  message(paste("已删除", length(files_to_delete), "个旧文件"))
}

# 调用函数处理两类文件
clean_old_files(file_prefix = "log_metrics", target_dir = "data/generated_metrics")
clean_old_files(file_prefix = "viewers by app", target_dir = "data/generated_metrics")

关键逻辑说明

  • dir_ls:批量获取目标路径下匹配前缀的文件,避免手动遍历
  • str_remove:精准提取文件名中的时间戳字符串,与生成文件时的%Y%m%d%H%M格式对应
  • ymd_hm:将时间戳字符串转换为可排序的时间对象,确保新旧判断准确
  • slice:跳过前3个最新文件,筛选出所有待删除的旧文件
  • file_delete:执行删除操作,测试阶段建议先用print确认待删文件无误

注意事项

  1. 确保target_dir路径与生成文件时的路径完全一致
  2. 生成文件的时间戳格式必须和函数中ymd_hm的解析格式匹配(当前为年月日时分)
  3. 首次运行建议注释file_delete,用print验证待删文件列表

内容的提问来源于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 15:30:22