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

基于TXT文件信息批量修改文件名的R语言精准匹配问题

精准匹配COMP_ID修改文件名的问题

我之前在Stack Exchange上提过利用独立TXT文件信息修改文件名的问题并得到了解答,尝试编辑原问题时被建议发布新问题。

现有文件信息

ID映射TXT文件

包含CHEM_ID和COMP_ID两列,内容示例:

CHEM_ID     COMP_ID
M35         metmss_42370
M501        metmss_485
M555555     metmss_27665

需要重命名的文件

当前文件名示例:

BIB.metmss_42370.european-2024-03-04.txt.gz

每个文件的metmss_xxxx编号唯一。

预期与现有代码

原本希望用R语言修改文件名,将对应CHEM_ID加入,同时把metmss替换为C,预期修改后示例:

BIB.M35.C42370.european-2024-03-04.txt.gz

从之前的回答中得到基础解决方案:

fnm <- list.files(pattern='^BIB', full.names=TRUE)
ids <- read.table('foo.txt', header=TRUE)  ## file w/ ID columns
lapply(seq_len(nrow(ids)), \(i) {
  old <- fnm[grep(ids$COMP_ID[i], fnm)]
  new <- sub('metmss_', sprintf('%s.C', ids$CHEM_ID[i]), old)
  file.rename(old, new)
})

之后我自行修改代码调整文件名格式:

fnm <- list.files(pattern='^BIB', full.names=TRUE)
ids <- read.table('../../../../../../data/compid_chemid.txt', header=TRUE)
for (i in seq_len(nrow(ids))) {
  old <- fnm[grep(ids$COMP_ID[i], fnm)]
  new <- sub('metmss_', paste0(ids$CHEM_ID[i], '_C'), old)
  new <- sub('BIB.', '', new)  
  new <- sub('(european)-(\\d{4}-\\d{2}-\\d{2})', 'BIB_EUR_SAIGE_GRCh37_\\2', new)  
  new <- gsub('-', '', new) 
  file.rename(old, new)
}

修改后目标文件名示例:

M35_C42370.BIB_EUR_SAIGE_GRCh37_20240304.txt.gz

当前问题:匹配不精准

现在部分文件名被错误修改,模式匹配存在问题。例如,正确对应metmss_57的CHEM_ID是M561,但代码将所有名称中包含metmss_57的文件都匹配为M561,导致错误命名:

M561_C57.BIB_EUR_SAIGE_GRCh37_20240304.txt.gz
M561_C57331.BIB_EUR_SAIGE_GRCh37_20240304.txt.gz
M561_C57369.BIB_EUR_SAIGE_GRCh37_20240304.txt.gz
M561_C57372.BIB_EUR_SAIGE_GRCh37_20240304.txt.gz 

所有COMP_ID与CHEM_ID的匹配关系在原TXT文件中都是唯一的,无重复。希望能解决这个精准匹配的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:07:26