**Goal:** To ensure "the sum of the counts for [my samples] is the same as the counts in the [samples] columns in `ddsColl`" after collapsing replicates using DESeq2.

Before performing differential expression (DE) analysis on my RNA-seq data stored in a DESeqDataSet object, I need to collapse the read counts observed for each of my technical replicates. This should be simple enough using the DESeq2 [manual][1] and [vignettes][2] available as reference.

This is how you collapse replicates:

    ddsColl <- collapseReplicates(dds, dds$sample, dds$run)
    # examine the colData of the collapsed data
    colData(ddsColl)
    # check that the sum of the counts for "sample1" is the same
    # as the counts in the "sample1" column in ddsColl
    matchFirstLevel <- dds$sample == levels(dds$sample)[1]
    stopifnot(all(rowSums(counts(dds[,matchFirstLevel])) == counts(ddsColl[,1])))

However, when I try this, I get the following error with no apparent resolution reported in the manual or on online forums:

    Error: all(rowSums(counts(dds[, matchFirstLevel])) == counts(ddsColl[,  .... is not TRUE

**How might I circumvent this error and continue on with the analysis?**


----------


**Input files:**

    > head(cts)
                KO1_P1_L001.Counts KO1_P1_L002.Counts KO1_P2_L001.Counts KO1_P2_L002.Counts KO1_P3_L001.Counts KO1_P3_L002.Counts KO2_P1_L001.Counts KO2_P1_L002.Counts KO2_P2_L001.Counts KO2_P2_L002.Counts KO2_P3_L001.Counts KO2_P3_L002.Counts WT_P1_L001.Counts WT_P1_L002.Counts WT_P2_L001.Counts WT_P2_L002.Counts WT_P3_L001.Counts WT_P3_L002.Counts
    DDX11L1                      1                  0                  1                  1                  2                  1                  0                  1                  2                  1                  3                  1                 7                 2                 1                 1                 0                 0
    WASH7P                     124                144                128                151                102                118                 39                 41                103                 87                105                106               125               120                13                26               104               136
    MIR6859-1                    8                  6                  4                  5                  4                  6                  2                  2                  7                  2                  7                  6                 6                 6                 2                 2                 2                 9
    MIR1302-2HG                  1                  4                  0                  0                  0                  2                  2                  2                  2                  2                  0                  4                 1                 2                 0                 3                 2                 2
    MIR1302-2                    0                  0                  0                  0                  0                  0                  0                  0                  0                  0                  0                  0                 0                 0                 0                 0                 0                 0
    FAM138A                      0                  0                  0                  0                  0                  0                  0                  0                  0                  0                  0                  0                 0                 0                 0                 0                 0                 0
    
    > print(coldata)
                       cell_type condition sample           run
    KO1_P1_L001.Counts     human    longKO     l1  long_P1_L001
    KO1_P1_L002.Counts     human    longKO     l1  long_P1_L002
    KO1_P2_L001.Counts     human    longKO     l2  long_P2_L001
    KO1_P2_L002.Counts     human    longKO     l2  long_P2_L002
    KO1_P3_L001.Counts     human    longKO     l3  long_P3_L001
    KO1_P3_L002.Counts     human    longKO     l3  long_P3_L002
    KO2_P1_L001.Counts     human   shortKO     s1 short_P1_L001
    KO2_P1_L002.Counts     human   shortKO     s1 short_P1_L002
    KO2_P2_L001.Counts     human   shortKO     s2 short_P2_L001
    KO2_P2_L002.Counts     human   shortKO     s2 short_P2_L002
    KO2_P3_L001.Counts     human   shortKO     s3 short_P3_L001
    KO2_P3_L002.Counts     human   shortKO     s3 short_P3_L002
    WT_P1_L001.Counts      human        WT     w1    wt_P1_L001
    WT_P1_L002.Counts      human        WT     w1    wt_P1_L002
    WT_P2_L001.Counts      human        WT     w2    wt_P2_L001
    WT_P2_L002.Counts      human        WT     w2    wt_P2_L002
    WT_P3_L001.Counts      human        WT     w3    wt_P3_L001
    WT_P3_L002.Counts      human        WT     w3    wt_P3_L002

**My workflow:**

    > cts <- read.table("counts.txt", header=T, sep="\t", row.names="Geneid")
    > coldata <- read.csv(file="annotationFile.csv", sep=",", row.names=1)
    
    > dds <- DESeqDataSetFromMatrix(countData = cts, colData = coldata, design = ~ condition)
    > dds
    class: DESeqDataSet 
    dim: 59368 18 
    metadata(1): version
    assays(1): counts
    rownames(59368): DDX11L1 WASH7P ... MT-TT MT-TP
    rowData names(0):
    colnames(18): KO1_P1_L001.Counts KO1_P1_L002.Counts ... WT_P3_L001.Counts WT_P3_L002.Counts
    colData names(4): cell_type condition sample run
    
    > ddsColl <- collapseReplicates(dds, dds$sample, dds$run)
    > ddsColl
    class: DESeqDataSet 
    dim: 59368 9 
    metadata(1): version
    assays(1): counts
    rownames(59368): DDX11L1 WASH7P ... MT-TT MT-TP
    rowData names(0):
    colnames(9): l1 l2 ... w2 w3
    colData names(5): cell_type condition sample run runsCollapsed
    
    > colData(ddsColl)
    DataFrame with 9 rows and 5 columns
         cell_type condition      sample           run               runsCollapsed
       <character>  <factor> <character>   <character>                 <character>
    l1       human   longKO           l1  long_P1_L001   long_P1_L001,long_P1_L002
    l2       human   longKO           l2  long_P2_L001   long_P2_L001,long_P2_L002
    l3       human   longKO           l3  long_P3_L001   long_P3_L001,long_P3_L002
    s1       human   shortKO          s1 short_P1_L001 short_P1_L001,short_P1_L002
    s2       human   shortKO          s2 short_P2_L001 short_P2_L001,short_P2_L002
    s3       human   shortKO          s3 short_P3_L001 short_P3_L001,short_P3_L002
    w1       human   WT               w1    wt_P1_L001       wt_P1_L001,wt_P1_L002
    w2       human   WT               w2    wt_P2_L001       wt_P2_L001,wt_P2_L002
    w3       human   WT               w3    wt_P3_L001       wt_P3_L001,wt_P3_L002
    
    > matchFirstLevel <- dds$sample == levels(dds$sample)[1]
    > matchFirstLevel
    logical(0)
    > stopifnot(all(rowSums(counts(dds[,matchFirstLevel])) == counts(ddsColl[,1])))
    Error: all(rowSums(counts(dds[, matchFirstLevel])) == counts(ddsColl[,  .... is not TRUE

The only difference I see between my DESeq2 workflow output is the result of `matchFirstLevel` (see below for expected result). Why might this be for my dataset, but not the example dataset?

**Example workflow:**

    > dds <- makeExampleDESeqDataSet(m=12)
    > dds$sample <- factor(sample(paste0("sample",rep(1:9, c(2,1,1,2,1,1,2,1,1)))))
    > dds$run <- paste0("run",1:12)
    > ddsColl <- collapseReplicates(dds, dds$sample, dds$run)
    > colData(ddsColl)
    DataFrame with 9 rows and 4 columns
            condition   sample         run runsCollapsed
             <factor> <factor> <character>   <character>
    sample1         B  sample1       run10   run10,run11
    sample2         A  sample2        run5          run5
    sample3         A  sample3        run6          run6
    sample4         A  sample4        run1     run1,run4
    sample5         B  sample5        run7          run7
    sample6         B  sample6        run9          run9
    sample7         A  sample7        run3    run3,run12
    sample8         B  sample8        run8          run8
    sample9         A  sample9        run2          run2
    > colnames(ddsColl)
    [1] "sample1" "sample2" "sample3" "sample4" "sample5" "sample6" "sample7" "sample8" "sample9"
    > matchFirstLevel <- dds$sample == levels(dds$sample)[1]
    > matchFirstLevel
     [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE
    > stopifnot(all(rowSums(counts(dds[,matchFirstLevel])) == counts(ddsColl[,1])))

  [1]: https://bioconductor.org/packages/devel/bioc/manuals/DESeq2/man/DESeq2.pdf
  [2]: http://bioconductor.org/packages/devel/bioc/vignettes/DESeq2/inst/doc/DESeq2.html