
Last chance! 50% off unlimited learning
Sale ends in
pivot_longer()
"lengthens" data, increasing the number of rows and
decreasing the number of columns. The inverse transformation is
pivot_wider()
Learn more in vignette("pivot")
.
pivot_longer(
data,
cols,
names_to = "name",
names_prefix = NULL,
names_sep = NULL,
names_pattern = NULL,
names_ptypes = list(),
names_transform = list(),
names_repair = "check_unique",
values_to = "value",
values_drop_na = FALSE,
values_ptypes = list(),
values_transform = list(),
...
)
A data frame to pivot.
<tidy-select
> Columns to pivot into
longer format.
A string specifying the name of the column to create
from the data stored in the column names of data
.
Can be a character vector, creating multiple columns, if names_sep
or names_pattern
is provided. In this case, there are two special
values you can take advantage of:
NA
will discard that component of the name.
.value
indicates that component of the name defines the name of the
column containing the cell values, overriding values_to
.
A regular expression used to remove matching text from the start of each variable name.
If names_to
contains multiple values,
these arguments control how the column name is broken up.
names_sep
takes the same specification as separate()
, and can either
be a numeric vector (specifying positions to break on), or a single string
(specifying a regular expression to split on).
names_pattern
takes the same specification as extract()
, a regular
expression containing matching groups (()
).
If these arguments do not give you enough control, use
pivot_longer_spec()
to create a spec object and process manually as
needed.
A list of column name-prototype pairs.
A prototype (or ptype for short) is a zero-length vector (like integer()
or numeric()
) that defines the type, class, and attributes of a vector.
Use these arguments if you want to confirm that the created columns are
the types that you expect. Note that if you want to change (instead of confirm)
the types of specific columns, you should use names_transform
or
values_transform
instead.
A list of column name-function pairs.
Use these arguments if you need to change the types of specific columns.
For example, names_transform = list(week = as.integer)
would convert
a character variable called week
to an integer.
If not specified, the type of the columns generated from names_to
will
be character, and the type of the variables generated from values_to
will be the common type of the input columns used to generate them.
What happens if the output has invalid column names?
The default, "check_unique"
is to error if the columns are duplicated.
Use "minimal"
to allow duplicates in the output, or "unique"
to
de-duplicated by adding numeric suffixes. See vctrs::vec_as_names()
for more options.
A string specifying the name of the column to create
from the data stored in cell values. If names_to
is a character
containing the special .value
sentinel, this value will be ignored,
and the name of the value column will be derived from part of the
existing column names.
If TRUE
, will drop rows that contain only NA
s
in the value_to
column. This effectively converts explicit missing values
to implicit missing values, and should generally be used only when missing
values in data
were created by its structure.
Additional arguments passed on to methods.
pivot_longer()
is an updated approach to gather()
, designed to be both
simpler to use and to handle more use cases. We recommend you use
pivot_longer()
for new code; gather()
isn't going away but is no longer
under active development.
# NOT RUN {
# See vignette("pivot") for examples and explanation
# Simplest case where column names are character data
relig_income
relig_income %>%
pivot_longer(!religion, names_to = "income", values_to = "count")
# Slightly more complex case where columns have common prefix,
# and missing missings are structural so should be dropped.
billboard
billboard %>%
pivot_longer(
cols = starts_with("wk"),
names_to = "week",
names_prefix = "wk",
values_to = "rank",
values_drop_na = TRUE
)
# Multiple variables stored in column names
who %>% pivot_longer(
cols = new_sp_m014:newrel_f65,
names_to = c("diagnosis", "gender", "age"),
names_pattern = "new_?(.*)_(.)(.*)",
values_to = "count"
)
# Multiple observations per row
anscombe
anscombe %>%
pivot_longer(everything(),
names_to = c(".value", "set"),
names_pattern = "(.)(.)"
)
# }
Run the code above in your browser using DataLab