Spread a key-value pair across multiple columns
Development on spread() is complete, and for new code we recommend
switching to pivot_wider(), which is easier to use, more featureful, and
still under active development.
df %>% spread(key, value) is equivalent to
df %>% pivot_wider(names_from = key, values_from = value)
See more details in vignette("pivot").
spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE, sep = NULL)
| data | A data frame. | 
| key, value | Column names or positions. This is passed to
 These arguments are passed by expression and support quasiquotation (you can unquote column names or column positions). | 
| fill | If set, missing values will be replaced with this value. Note
that there are two types of missingness in the input: explicit missing
values (i.e.  | 
| convert | If  | 
| drop | If  | 
| sep | If  | 
library(dplyr)
stocks <- data.frame(
  time = as.Date('2009-01-01') + 0:9,
  X = rnorm(10, 0, 1),
  Y = rnorm(10, 0, 2),
  Z = rnorm(10, 0, 4)
)
stocksm <- stocks %>% gather(stock, price, -time)
stocksm %>% spread(stock, price)
stocksm %>% spread(time, price)
# Spread and gather are complements
df <- data.frame(x = c("a", "b"), y = c(3, 4), z = c(5, 6))
df %>% spread(x, y) %>% gather("x", "y", a:b, na.rm = TRUE)
# Use 'convert = TRUE' to produce variables of mixed type
df <- data.frame(row = rep(c(1, 51), each = 3),
                 var = c("Sepal.Length", "Species", "Species_num"),
                 value = c(5.1, "setosa", 1, 7.0, "versicolor", 2))
df %>% spread(var, value) %>% str
df %>% spread(var, value, convert = TRUE) %>% strPlease choose more modern alternatives, such as Google Chrome or Mozilla Firefox.