是我还是新手,但文件和文件夹又杂乱无章(由于我们的生物学原因):我得到的目录包含大量的.txt文件(〜900,000 +),以前所有文件的命名格式都不一致:(
例如,目录中的凌乱文件看起来像这样:
ctrl_S978765_uns_dummy_00_none.txt
ctrl_S978765_3S_Cookie_00_none.txt
S59607_3S_goody_3M_V10.txt
ctrlnuc30-100_S3245678_DMSO_00_none.txt
ctrlRAP_S0846567_3S_Dex_none.txt
S6498432_2S_Fulra_30mM_V100.txt
.....
如您所见,命名没有可靠的一致性。对我来说重要的是嵌入其中的ID代码,例如S978765。现在,我已经有了所需的这些ID代码的列表(100个ID代码)。
包含以下列表的CSV文件,请注意,由于第二列中的CLnumber值不同,因此该列表在行中确实具有重复的ID代码:
ID code CLnumber
S978765 1
S978765 2
S306223 1
S897458 1
S514486 2
....
因此,我想实现以下任务:通过匹配我的列表,使用代码ID查找所有混乱的命名文件。并将它们复制到新目录。
我曾考虑过使用list.files()来获取所有.txt文件及其名称,然后在下一步匹配代码ID名称时就陷入了困境,我知道如何使用一个字符串,说“ S978765”,但是如果我一个接一个地做,这几乎就像手动挖掘文件夹一样。
我如何将列1中的ID代码名称作为列表提供,并将其与目录中凌乱的文件标题名称进行比较/匹配,然后将其复制到新文件夹中?
非常感谢,ML
此作品:
library(stringr)
# get this via list.files in your actual code
files <- c("ctrl_S978765_uns_dummy_00_none.txt",
"ctrl_S978765_3S_Cookie_00_none.txt",
"S59607_3S_goody_3M_V10.txt",
"ctrlnuc30-100_S3245678_DMSO_00_none.txt",
"ctrlRAP_S0846567_3S_Dex_none.txt",
"S6498432_2S_Fulra_30mM_V100.txt")
ids <- data.frame(`ID Code` = c("S978765", "S978765", "S306223", "S897458", "S514486"),
CLnumber = c(1, 2, 1, 1, 2),
stringsAsFactors = FALSE)
str_subset(files, paste(ids$ID.Code, collapse = "|"))
#> [1] "ctrl_S978765_uns_dummy_00_none.txt" "ctrl_S978765_3S_Cookie_00_none.txt"
您可以使用正则表达式从文件名中提取ID代码。