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

如何基于版本号筛选文件夹文件并提取各文档的最终草稿?

解决思路与实现代码

要筛选每个文档的最终草稿(罗马数字版本最高的文件),核心是先拆分文件名提取文档标识和版本号,再将罗马数字转为阿拉伯数字以便比较大小,最后按文档分组筛选最大值。以下是具体实现步骤:

步骤1:获取文件列表

用list.files()获取目标文件夹下所有.txt文件:

# 替换为你的文件夹路径
files <- list.files(path = "./your_folder", pattern = "\\.txt$", full.names = FALSE)

步骤2:解析文件名并转换版本号

首先需要把文件名里的罗马数字版本转成阿拉伯数字(方便比较大小),然后拆分出每个文件对应的文档ID:

# 罗马数字转阿拉伯数字的工具函数(含错误处理)
roman_to_num <- function(roman_str) {
  tryCatch({
    as.integer(as.roman(roman_str))
  }, error = function(e) {
    warning(paste("跳过无效罗马数字文件:", roman_str))
    NA
  })
}

# 去掉文件名的.txt后缀
file_names_no_ext <- sub("\\.txt$", "", files)
# 按下划线拆分文件名
split_names <- strsplit(file_names_no_ext, "_")

# 提取文档ID(前3段:比如A_COR_001)和罗马版本号
doc_ids <- sapply(split_names, function(x) paste(x[1:3], collapse = "_"))
versions <- sapply(split_names, function(x) x[4])

# 整理成数据框,方便后续分组处理
file_df <- data.frame(
  file = files,
  doc_id = doc_ids,
  version_num = sapply(versions, roman_to_num),
  stringsAsFactors = FALSE
)

# 移除版本号无效的文件(可选)
file_df <- file_df[!is.na(file_df$version_num), ]

步骤3:分组筛选最终草稿

可以用基础R或dplyr包实现分组筛选,两种方式任选:

方式1:基础R实现

# 按文档ID分组,选出每个组里版本号最大的文件
final_drafts <- aggregate(
  file ~ doc_id, 
  data = file_df, 
  FUN = function(x) {
    # 找到当前组内版本号最大的对应文件
    x[which.max(file_df$version_num[file_df$file %in% x])]
  }
)

# 提取最终的文件名列表
final_draft_files <- final_drafts$file

方式2:dplyr包实现(更简洁)

library(dplyr)

final_draft_files <- file_df %>%
  group_by(doc_id) %>%
  filter(version_num == max(version_num)) %>%
  pull(file)

验证结果

运行后final_draft_files就是每个文档的最终草稿文件名,比如会包含A_COR_001_II、A_COR_002_II、A_COR_003_III、A_COR_004_IV等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 16:02:41