pivot_wider is now preferred to spread. There were names with differing ages, so the snippet below distinguishes them.
suppressPackageStartupMessages({
library(tidyr)
library(dplyr)
})
people <- tibble::tribble(
~name, ~key, ~value,
#-----------------|--------|------
"Phillip Woods, Jr.", "age", 45,
"Phillip Woods, Jr.", "height", 186,
"Phillip Woods, Sr.", "age", 75,
"Jessica Cordero", "age", 37,
"Jessica Cordero", "height", 156
)
people %>%
group_by(name) %>%
pivot_wider(names_from = key, values_from = value)
#> # A tibble: 3 × 3
#> # Groups: name [3]
#> name age height
#> <chr> <dbl> <dbl>
#> 1 Phillip Woods, Jr. 45 186
#> 2 Phillip Woods, Sr. 75 NA
#> 3 Jessica Cordero 37 156