# Learning diff mat <- read.table( text= "TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE") mat <- as.logical(unlist(mat)) dim(mat) <- c(7, 3) diff(mat) > mat > diff(mat) [,1] [,2] [,3] [,1] [,2] [,3] [1,] TRUE TRUE TRUE [2,] FALSE TRUE TRUE [1,] -1 0 0 [3,] TRUE TRUE TRUE [2,] 1 0 0 [4,] TRUE TRUE FALSE [3,] 0 0 -1 [5,] TRUE TRUE FALSE [4,] 0 0 0 [6,] TRUE FALSE FALSE [5,] 0 -1 0 [7,] TRUE FALSE FALSE [6,] 0 0 0 It looks like `diff` performs row-wise diffs. Row(2) - Row(1) or Row("J") - Row("J-1")