R: Fast Reordering of Data Frame Rows

roworder {collapse} | R Documentation

## Fast Reordering of Data Frame Rows

### Description

A fast substitute for `dplyr::arrange`. It returns a sorted copy of the data frame, unless the data is already sorted in which case no copy is made. In addition, rows can be manually re-ordered. Use `data.table::setorder` to sort a data frame without creating a copy.

### Usage

    roworder(X, ..., na.last = TRUE)

    roworderv(X, cols = NULL, neworder = NULL, decreasing = FALSE,
              na.last = TRUE, pos = "front")

### Arguments

`X` | a data frame or list of equal-length columns.
`...` | comma-separated columns of `X` to sort by e.g. `var1, var2`. Negatives i.e. `-var1, var2` can be used to sort in decreasing order of `var1`.
`cols` | select columns to sort by using a function, column names, indices or a logical vector. The default `NULL` sorts by all columns in order of occurrence (from left to right).
`na.last` | logical. If `TRUE`, missing values in the sorting columns are placed last; if `FALSE`, they are placed first; if `NA` they are removed (argument passed to `radixorderv`).
`decreasing` | logical. Should the sort order be increasing or decreasing? Can also be a vector of length equal to the number of arguments in `cols` (argument passed to `radixorderv`).
`neworder` | an ordering vector, can be `< nrow(X)`. if `pos = "front"` or `pos = "end"`, a logical vector can also be supplied. This argument overwrites `cols`.
`pos` | integer or character. Different arrangement options if `!is.null(neworder) && length(neworder) < nrow(X)`.
Int. |  | String |  | Description
1 |  | "front" |  | move rows in `neworder` to the front (top) of `X` (the default).
2 |  | "end" |  | move rows in `neworder` to the end (bottom) of `X`.
3 |  | "exchange" |  | just exchange the order of rows in `neworder`, other rows remain in the same position.
4 |  | "after" |  | place all further selected rows behind the first selected row.

### Value

A copy of `X` with rows reordered. If `X` is already sorted, `X` is simply returned.

### Note

If you don't require a copy of the data, use `data.table::setorder` (you can also use it in a piped call as it invisibly returns the data).

`roworder(v)` has internal facilities to deal with indexed data.

### See Also

`colorder`, Data Frame Manipulation, Fast Grouping and Ordering, Collapse Overview

### Examples

    head(roworder(airquality, Month, -Ozone))
    head(roworder(airquality, Month, -Ozone, na.last = NA))  # Removes the missing values in Ozone

    ## Same in standard evaluation
    head(roworderv(airquality, c("Month", "Ozone"), decreasing = c(FALSE, TRUE)))
    head(roworderv(airquality, c("Month", "Ozone"), decreasing = c(FALSE, TRUE), na.last = NA))

    ## Custom reordering
    head(roworderv(mtcars, neworder = 3:4))               # Bring rows 3 and 4 to the front
    head(roworderv(mtcars, neworder = 3:4, pos = "end"))  # Bring them to the end
    head(roworderv(mtcars, neworder = mtcars$vs == 1))    # Bring rows with vs == 1 to the top

[Package collapse version 1.8.6 Index]