R:从目录中查找名称包含特定字符串并与我的所需文件列表匹配的文件

问题描述 投票:0回答:2

是我还是新手,但文件和文件夹又杂乱无章(由于我们的生物学原因):我得到的目录包含大量的.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

r string-matching
2个回答
0
投票

此作品:

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"

0
投票

您可以使用正则表达式从文件名中提取ID代码。

© www.soinside.com 2019 - 2024. All rights reserved.