Bfu38
Bfu38

Reputation: 1141

Subset files according to a list of patterns

I have a list of files named for example:

"Experiment_myex1_test1"     
"Experiment_myex1_test2"      
"Experiment_myex1_test3"       
"Experiment_myex2_test1"      
"Experiment_myex2_test2"    
"Experiment_myex2_test3"      
"Experiment_myex3_test1"      
"Experiment_myex3_test2"    
"Experiment_myex3_test3"    

and so on (1000 total files) and a file .txt that looks like this:

df
List_of_ex      
myex1     
myex1    
myex1 
myex2     
myex2      
myex2
myex4    
myex4     
myex4     

(They appear in triplicate because of *test1, *test2 and *test3).

I would like to get a list of files from list.files() that match the patterns in df[,1]. In other words, I would like to get the following list:

"Experiment_myex1_test1"     
"Experiment_myex1_test2"      
"Experiment_myex1_test3"       
"Experiment_myex2_test1"      
"Experiment_myex2_test2"    
"Experiment_myex2_test3"      

Upvotes: 0

Views: 68

Answers (1)

Juan Bosco
Juan Bosco

Reputation: 1430

Assuming you know for sure that you will always have "test1", "test2" and "test3", you can use regex with grep for this task.

lapply(df[, 1], function(pattern_ex) {
  lapply(c("test1", "test2", "test3"), function(pattern_test){
    grep(pattern = paste0(pattern_ex, ".*", pattern_test, "$"), 
         x = list.files(),
         value = T)
  })
}) 

Upvotes: 1

Related Questions