rle function from the base package.
Rle(values, lengths):
      This constructor creates an Rle instance out of an atomic
      vector or factor object values and an integer or numeric vector
      lengths with all positive elements that represent how many times
      each value is repeated. The length of these two vectors must be the same.
      lengths can be missing in which case values is turned
      into an Rle.
    x is an Rle object: runLength(x):
      Returns the run lengths for x.
    runValue(x):
      Returns the run values for x.
    nrun(x):
      Returns the number of runs in x.
    start(x):
      Returns the starts of the runs for x.
    end(x):
      Returns the ends of the runs for x.
    width(x):
      Same as runLength(x).
    x is an Rle object: runLength(x) <- value:
      Replaces x with a new Rle object using run values
      runValue(x) and run lengths value.
    runValue(x) <- value:
      Replaces x with a new Rle object using run values
      value and run lengths runLength(x).
    from is an atomic vector:
    as(from, "Rle"):
        This coercion creates an Rle instances out of an atomic
        vector from.
      x and from are Rle objects:
    as.vector(x, mode="any"), as(from, "vector"):
        Creates an atomic vector based on the values contained in
        x. The vector will be coerced to the requested mode,
        unless mode is "any", in which case the most appropriate
        type is chosen.
      as.vectorORfactor(x): Creates an atomic vector or factor,
        based on the type of values contained in x. This is the
        most general way to decompress the Rle to a native R data
        structure.
      as.factor(x), as(from, "factor"): Creates a factor object
        based on the values contained in x.
      as.data.frame(x), as(from, "data.frame"): Creates
        a data.frame with a single column holding the result of
        as.vector(x).
      x is an Rle object: x[i, drop=getOption("dropRle", default=FALSE)]:
      Subsets x by index i, where i can be positive
      integers, negative integers, a logical vector of the same length as
      x, an Rle object of the same length as x
      containing logical values, or an IRanges object.
      When drop=FALSE returns an Rle object. When drop=TRUE,
      returns an atomic vector.
    x[i] <- value:
      Replaces elements in x specified by i with corresponding
      elements in value. Supports the same types for i as
      x[i].
    x %in% table:
      Returns a logical Rle representing set membership in
      table.
    append(x, values, after = length(x)):
      Insert one Rle into another Rle.
      valuesafterx after which the values
          are to be inserted.c(x, ...):
      Combines a set of Rle objects.
    findRun(x, vec):
      Returns an integer vector indicating the run indices in Rle vec
      that are referenced by the indices in the integer vector x.
    head(x, n = 6L):
      If n is non-negative, returns the first n elements of x.
      If n is negative, returns all but the last abs(n) elements
      of x.
    is.na(x):
      Returns a logical Rle indicating with values are NA.
    is.unsorted(x, na.rm = FALSE, strictly = FALSE):
      Returns a logical value specifying if x is unsorted.
      na.rmstrictlylength(x):
      Returns the underlying vector length of x.
    match(x, table, nomatch = NA_integer_, incomparables = NULL):
      Matches the values in x to table:
      tablenomatchincomparablesx matching a value in this vector is assigned
          the nomatch value.rep(x, times, length.out, each), rep.int(x, times):
      Repeats the values in x through one of the following conventions:
      timeslength(x), or to repeat the whole vector
          if of length 1.length.outeachx is
          repeated each times.rev(x):
      Reverses the order of the values in x.
    show(object):
      Prints out the Rle object in a user-friendly way.
    order(..., na.last = TRUE, decreasing = FALSE, method = c("shell", "radix")):
      Returns a permutation which rearranges its first argument
      into ascending or descending order, breaking ties by further
      arguments. See order.
    sort(x, decreasing = FALSE, na.last = NA):
      Sorts the values in x.
      decreasingTRUE, sort values in decreasing
          order. If FALSE, sort values in increasing order.na.lastTRUE, missing values are placed last.
          If FALSE, they are placed first. If NA, they are
          removed.subset(x, subset):
      Returns a new Rle object made of the subset using logical vector
      subset.
    table(...):
      Returns a table containing the counts of the unique values. Supported
      arguments include useNA with values of `no' and `ifany'.
      Multiple Rle's must be combined with c() before calling table.
    tail(x, n = 6L):
      If n is non-negative, returns the last n elements of x.
      If n is negative, returns all but the first abs(n) elements
      of x.
    unique(x, incomparables = FALSE, ...):
      Returns the unique run values. The incomparables argument takes a
      vector of values that cannot be compared with FALSE being a special
      value that means that all values can be compared. 
    x and y are Rle object or
  some other vector-like object:
  setdiff(x, y): Returns the unique elements in
      x that are not in y.
    union(x, y):
      Returns the unique elements in either x or y.
    intersect(x, y):
      Returns the unique elements in both x and y.
      x <- Rle(10:1, 1:10)
  x
  runLength(x)
  runValue(x)
  nrun(x)
  diff(x)
  unique(x)
  sort(x)
  x[c(1,3,5,7,9)]
  x > 4
  x2 <- Rle(LETTERS[c(21:26, 25:26)], 8:1)
  table(x2)
  y <- Rle(c(TRUE,TRUE,FALSE,FALSE,TRUE,FALSE,TRUE,TRUE,TRUE))
  y
  as.vector(y)
  rep(y, 10)
  c(y, x > 5)
Run the code above in your browser using DataLab