Skip to content
Snippets Groups Projects
mergecounts.wdl 1.17 KiB
Newer Older
Cats's avatar
Cats committed
task MergeCounts {
Cats's avatar
Cats committed
    String? preCommand

Cats's avatar
Cats committed
    Array[File] inputFiles
    String outputFile
    String idVar
    String measurementVar

Cats's avatar
Cats committed
    # Based on a script by Szymon Kielbasa/Ioannis Moustakas
    command <<<
Cats's avatar
Cats committed
        set -e -o pipefail
Cats's avatar
Cats committed
        mkdir -p ${sub(outputFile, basename(outputFile) + "$", "")}
Cats's avatar
Cats committed
        ${preCommand}
Cats's avatar
Cats committed
        R --no-save --slave <<CODE > ${outputFile}
            library(dplyr)
            library(reshape2)

            listOfFiles <- c("${sep='", "' inputFiles}")

            d <- do.call(rbind, lapply(listOfFiles, function(file){
                d <- read.table(file, header=TRUE, comment.char="#")
                colI <- grep(${measurementVar}, colnames(d))
                colnames(d)[colI] <- strsplit(file, "/")[[1]][3]
                d <- d %>% melt(id.vars=${idVar}, measure.vars=colI,
                    variable.name="sample", value.name="count")
            }))

            d <- d %>% dcast(paste0(${idVar}, " ~ sample"), value.var="count")
            write.table(d, sep="\t", quote=FALSE, row.names=FALSE)
        CODE
    >>>
Cats's avatar
Cats committed

    output {
        File mergedCounts = outputFile
    }
Cats's avatar
Cats committed

    runtime {
        memory: 4 + (2*length(inputFiles))
    }
Cats's avatar
Cats committed
}