% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/verbs_utility.R
\name{slice_head}
\alias{slice_head}
\alias{slice_tail}
\alias{slice_min}
\alias{slice_max}
\title{Select first or last rows}
\usage{
slice_head(.data, n = 1L)

slice_tail(.data, n = 1L)

slice_min(.data, order_by, n = 1L, with_ties = TRUE)

slice_max(.data, order_by, n = 1L, with_ties = TRUE)
}
\arguments{
\item{.data}{A \code{vectra_node} object.}

\item{n}{Number of rows to select.}

\item{order_by}{Column to order by (for \code{slice_min}/\code{slice_max}).}

\item{with_ties}{If \code{TRUE} (default), includes all rows that tie with the
nth value. If \code{FALSE}, returns exactly \code{n} rows.}
}
\value{
A \code{vectra_node} for \code{slice_head()}, for grouped
\code{slice_min()}/\code{slice_max()}, and for ungrouped \code{slice_min/max(..., with_ties = FALSE)}. A data.frame for \code{slice_tail()} and ungrouped
\code{slice_min/max(..., with_ties = TRUE)} (the default), since these must
materialize all rows.
}
\description{
Select first or last rows
}
\details{
When \code{slice_min()}/\code{slice_max()} follow \code{\link[=group_by]{group_by()}}, the n smallest/largest
rows are taken within each group and the whole winning row is kept (every
column, including geometry carried as a string). \code{with_ties = FALSE} returns
exactly \code{n} rows per group; \code{with_ties = TRUE} keeps rows tied at the nth
value via min-rank. The \code{n = 1}, \code{with_ties = FALSE} case streams: it holds
only the running winner per group, so memory scales with the number of groups
(the result size), not the input. Other grouped cases buffer their input.
}
\examples{
f <- tempfile(fileext = ".vtr")
write_vtr(mtcars, f)
tbl(f) |> slice_head(n = 3) |> collect()
tbl(f) |> slice_min(order_by = mpg, n = 3) |> collect()
tbl(f) |> slice_max(order_by = mpg, n = 3) |> collect()
# earliest row per group, geometry/attrs preserved:
tbl(f) |> group_by(cyl) |> slice_min(mpg, n = 1, with_ties = FALSE) |> collect()
unlink(f)

}
