如果文件名的一部分匹配,如何匹配来自两个不同文件夹的两个文件

时间:2018-11-21 13:42:23

标签: r substr

我在不同位置的文件名中都有匹配的字符串,我需要对其进行匹配。 这是文件的样子,

    na_files
    /Users/AS/SAB-M-13.M4DF-2.T-bR.r1-v1_0-ADDFF.0087.cou
   /Users/AS/SAB-M-32.MSFG-2.T-bR.r1-v1_0-ADDFF.3989.cou
  /Users/AS/SAB-M-3.PZT-MOHUA-3.T-bR.r1-v1_0-ADDFF.6188.cou

以及其他目录中的以下文件列表

lb_files
    /Users/DS/SAB-M-13.M4DF-2.T-bR.r1-v1_0-ADDFF.0087.AD.lib
   /Users/DS/SAB-M-32.MSFG-2.T-bR.r1-v1_0-ADDFF.3989.AD.lib
  /Users/DS/SAB-M-3.PZT-MOHUA-3.T-bR.r1-v1_0-ADDFF.6188.AD.lib

我需要匹配两个列表中的na_fileslb_files才能继续。 所以我尝试使用

na_files = grep("cou", list.files(DIR, recursive=T, full.names=T), value=T)
lb_files = grep("lib", list.files(DIR, recursive=T, full.names=T), value=T)
all_patients = NA



 for(curr_file_idx in 1:length(pa_files)){
    curr_file = pat_files[curr_file_idx]
    libsize_file = libsize_files[curr_file_idx]
    curr_pa = data.frame(fread(curr_file))
    pa_id = strsplit(curr_file, "[.][P][Z][T][-]")[[1]][[2]]
    pa_id = substr(patient_id, 1, 5)
    libsize = data.frame(fread(libsize_file))
    pa_id2 = strsplit(libsize_file, "[.][P][Z][T][-]")[[1]][[2]]
    pa_id2 = substr(pa_id2, 1, 5)
    if(patient_id != pa_id2){
      print(pa_id)
      print(pa_id2)
      print("WRONG LB")
      return(1)
    }

但是此子字符串模式仅搜索一个文件,而其余文件则抛出错误。

Error in strsplit(curr_file, "[.][P][Z][T][-]")[[1]][[2]] : 
  subscript out of bounds

我需要适用于所有文件的任何正则表达式或模式。在三个文件中,.M4DF.MSFG.MOHUA应该匹配之后,这正是这个部分。

1 个答案:

答案 0 :(得分:0)

根据您的数据,提取na_fileslb_files的文件名

na_files<-c("SAB-M-13.M4DF-2.T-bR.r1-v1_0-ADDFF.0087.cou","SAB-M-32.MSFG-2.T-bR.r1-v1_0-ADDFF.3989.cou","SAB-M-3.PZT-MOHUA-3.T-bR.r1-v1_0-ADDFF.6188.cou")
lb_files<-c("SAB-M-13.M4DF-2.T-bR.r1-v1_0-ADDFF.0087.AD.lib","SAB-M-32.MSFG-2.T-bR.r1-v1_0-ADDFF.3989.AD.lib","SAB-M-3.PZT-MOHUA-3.T-bR.r1-v1_0-ADDFF.6188.AD.lib")

na_files_name<-stringi::stri_extract(na_files,regex = "[^.]+") #extracts file name up to first .
lb_files_name<-stringi::stri_extract(lb_files,regex = "[^.]+")


na_files_name %in% lb_files_name #checks the file names match