难倒如何将这个数据框从长到宽重塑

问题描述

我需要从长到宽重塑数据框。我想重塑几个变量,但也要保持数据框其余部分的格式。我有一个数据框,其中包含数年的种族、五分之一和收入。

df <- structure(list(year = c(2019,2019,2018,2018),race = c("Black Alone","Black Alone","Black Alone"),quintile = c("Lowest","Middle","Highest","Lowest","Highest"),income = c(8680,45356,177659,7657,42202,155520)),row.names = c(NA,-6L),class = c("tbl_df","tbl","data.frame"))

数据框 df 如下所示:

year  race         quintile  income
2019  Black Alone  Lowest    8680
2019  Black Alone  Middle    45356
2019  Black Alone  Highest   177659
2018  Black Alone  Lowest    7657
2018  Black Alone  Middle    42202
2018  Black Alone  Highest   155520

我希望数据框看起来像:

year  race         Lowest_income  Middle_income  Highest_income
2019  Black Alone  8680           45356          177659
2018  Black Alone  7657           42202          155520

我不知道从哪里开始实现这一目标。任何帮助将不胜感激!

解决方法

我们可以使用

library(dplyr)
library(tidyr)
library(stringr)
df %>% 
   mutate(quintile = str_c(quintile,'_income')) %>%
   pivot_wider(names_from = 'quintile',values_from = income)

-输出

# A tibble: 2 x 5
#   year race        Lowest_income Middle_income Highest_income
#  <dbl> <chr>               <dbl>         <dbl>          <dbl>
#1  2019 Black Alone          8680         45356         177659
#2  2018 Black Alone          7657         42202         155520