R/add_row_numbers.R

Defines functions add_row_numbers

Documented in add_row_numbers

#' Function to add a row number variable to a data frame. 
#' 
#' Row numbers will be a variable which is an integer, unlike 
#' \code{rownames_to_column} which adds a character variable. 
#' 
#' @author Stuart K. Grange
#' 
#' @param df Data frame to be transformed.
#' 
#' @param name Name of variable to use. \code{add_row_numbers} will silently 
#' drop an existing variable of the same name if present in \code{df}. 
#' 
#' @param zero_based Should the numbering start at \code{0} rather than \code{1}? 
#' Default is \code{FALSE}. 
#'
#' @seealso \code{\link{add_rownames}}
#' 
#' @return Data frame. 
#' 
#' @examples 
#' \dontrun{
#' 
#' # Add row numbers
#' data_zones <- add_row_numbers(data_zones)
#' 
#' # Or change the name
#' data_zones <- add_row_numbers(data_zones, name = "order")
#' 
#' # Use zero-based numbering
#' data_zones <- add_row_numbers(data_zones, name = "id", zero_based = TRUE)
#' 
#' }
#' 
#' @export
add_row_numbers <- function(df, name = "row_number", zero_based = FALSE) {
  
  # No longer in use
  .Deprecated(
    msg = "`add_row_numbers` is deprecated, please use tibble::rowid_to_column."
  )
  
  # Drop variable if exists
  if (name %in% names(df)) df[, name] <- NULL
  
  # Create sequence of integers
  sequence <- seq.int(1, to = nrow(df))
  
  if (zero_based) sequence <- sequence - 1L
  
  # Add sequence to data frame
  df[, name] <- sequence
  
  # Move variable to the first column position
  df <- select(df, !!name, everything())
  
  return(df)
  
}
skgrange/threadr documentation built on May 11, 2024, 12:16 p.m.