基于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
相关产品推荐
相关产品推荐

