pivot_wider()
"widens" data, increasing the number of columns and decreasing the number of rows. The inverse
transformation is pivot_longer()
.
Usage
pivot_wider(
data,
id_cols = NULL,
values_from = "Value",
names_from = "Name",
names_sep = "_",
names_prefix = "",
names_glue = NULL,
values_fill = NULL,
...
)
Arguments
- data
data.frame
. The data to pivot.- id_cols
character(1)
. The name of the column that identifies the rows. IfNULL
, it will use all the unique rows.- values_from
character(n)
. The name of the column that contains the values to be used as future variable values.- names_from
character(n)
. The name of the column(s) that contains the levels to be used as future column names.- names_sep
character(1)
. Ifnames_from
orvalues_from
contains multiple variables, this will be used to join their values together into a single string to use as a column name.- names_prefix
character(1)
. String added to the start of every variable name. This is particularly useful ifnames_from
is a numeric vector and you want to create syntactic variable names.- names_glue
character(1)
. Instead ofnames_sep
andnames_prefix
, you can supply a glue specification that uses thenames_from
columns to create custom column names. Note that the only delimiters supported bynames_glue
are curly brackets,{
and}
.- values_fill
numeric(n)
. Optionally, a (scalar) value that will be used to replace missing values in the new columns created.- ...
Not used for now.
Value
If a tibble was provided as input, pivot_wider()
also returns a
tibble. Otherwise, it returns a data frame.
Examples
data_long <- read.table(header = TRUE, text = "
subject sex condition measurement
1 M control 7.9
1 M cond1 12.3
1 M cond2 10.7
2 F control 6.3
2 F cond1 10.6
2 F cond2 11.1
3 F control 9.5
3 F cond1 13.1
3 F cond2 13.8
4 M control 11.5
4 M cond1 13.4
4 M cond2 12.9")
pivot_wider(
data_long,
id_cols = "subject",
names_from = "condition",
values_from = "measurement"
)
#> subject sex control cond1 cond2
#> 1 1 M 7.9 12.3 10.7
#> 2 2 F 6.3 10.6 11.1
#> 3 3 F 9.5 13.1 13.8
#> 4 4 M 11.5 13.4 12.9
pivot_wider(
data_long,
id_cols = "subject",
names_from = "condition",
values_from = "measurement",
names_prefix = "Var.",
names_sep = "."
)
#> subject sex Var.control Var.cond1 Var.cond2
#> 1 1 M 7.9 12.3 10.7
#> 2 2 F 6.3 10.6 11.1
#> 3 3 F 9.5 13.1 13.8
#> 4 4 M 11.5 13.4 12.9
production <- expand.grid(
product = c("A", "B"),
country = c("AI", "EI"),
year = 2000:2014
) %>%
filter((product == "A" & country == "AI") | product == "B") %>%
mutate(production = rnorm(nrow(.)))
pivot_wider(
production,
names_from = c("product", "country"),
values_from = "production",
names_glue = "prod_{product}_{country}"
)
#> year prod_A_AI prod_B_AI prod_B_EI
#> 1 2000 -0.24399241 0.4353313 -0.69475390
#> 2 2001 1.40735841 0.6640163 -0.17235734
#> 3 2002 0.24208579 0.4777955 -1.55287301
#> 4 2003 0.47450988 -0.5638155 -2.81039662
#> 5 2004 0.02122596 0.1511730 0.93459111
#> 6 2005 -1.20202066 -0.2370773 -0.54026076
#> 7 2006 -0.57998724 0.4633448 0.52688060
#> 8 2007 -0.14132877 0.9663687 -0.99768681
#> 9 2008 -0.85391920 -1.6952953 -0.30505267
#> 10 2009 1.19629139 -0.2538215 0.56936693
#> 11 2010 0.39035750 0.3673242 0.07176328
#> 12 2011 -1.06431585 -0.8007223 -0.32601133
#> 13 2012 0.95643219 -1.1394993 -0.11804413
#> 14 2013 0.16399451 -0.1356509 1.25739238
#> 15 2014 0.08610159 -1.3601053 0.45949303