代码之家  ›  专栏  ›  技术社区  ›  Prradep

在不匹配文件夹中文件的情况下提取标识符

  •  0
  • Prradep  · 技术社区  · 6 年前

    如何提取没有生成相应文件的标识符?

    作为生成fo文件输入的标识符:

    fileIden <- c('a-1','a-2','a-3','b-1','b-2','c-1','d-1','d-2','d-3','d-4')
    

    正在检查生成的文件:

    files <- list.files(".")
    
    files
    # [1] "a-2.csv" "a-3.csv" "b-1.csv" "c-1.csv" "d-3.csv"
    
    # Generated here for reproducibility.
    # files <- c("a-2.csv", "a-3.csv", "b-1.csv", "c-1.csv", "d-3.csv")
    

    如果所有进程都完全成功,则需要文件

    fileExp <- paste(fileIden, ".csv", sep = "")
    # [1] "a-1.csv" "a-2.csv" "a-3.csv" "b-1.csv" "b-2.csv" "c-1.csv" "d-1.csv" "d-2.csv" "d-3.csv" "d-4.csv"
    

    缺少任何预期的文件?

    fileMiss <- fileExp[!fileExp %in% files]
    # [1] "a-1.csv" "b-2.csv" "d-1.csv" "d-2.csv" "d-4.csv"
    

    预期产量

    # "a-1" "b-2" "d-1" "d-2" "d-4"
    

    我确信有一个简单的过程可以直接获得上述输出,而无需创建文件: fileExp , fileMiss . 你能带我去那儿吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   PKumar    6 年前

    你可以这样做:

    fileIden <- c('a-1','a-2','a-3','b-1','b-2','c-1','d-1','d-2','d-3','d-4')
    file <- c("a-2.csv", "a-3.csv" ,"b-1.csv", "c-1.csv", "d-3.csv")
    
    
    setdiff(fileIden, trimws(gsub("\\.csv","", file)))
    

    另一种方法:

    setdiff(fileIden, stringr::str_extract(file,"(.*)(?=\\.csv)"))
    

    逻辑 :

    setdiff 找到两个向量之间的差异, gsub 将“.csv”替换为空,我们将它们组合在一起以找出这些向量之间的差异。

    输出:

    #[1] "a-1" "b-2" "d-1" "d-2" "d-4"
    
        2
  •  0
  •   divibisan    6 年前

    不那么优雅的做法

    result <- ifelse(fileIden %in% substr(file, 1, 3), "", fileIden)
    result[result != ""]