如何在 R 中将分层数据(从 Beyond 20/20)从部分宽格式转换为长格式?

How to transform hierarchical data (from Beyond 20/20) from a partially wide format to long format in R?

我有一些人口普查数据,部分是长格式,部分是宽格式,是从 Beyond 20/20 导出的。我正在为如何重新格式化数据而苦苦挣扎,因为它并不完全是宽格式。在下面的数据集中,有每个教育水平和州的男性和女性人数。例如:

> have
  State Education Male Female
1    CA         1    3      4
2    CA         2    4      6
3    NV         1    7      8
4    NV         2    9     19

但是,我希望数据是完整的长格式。这意味着拥有每个独特状态、教育和性别类别的个人数量。例如:

> want
  State Education    Sex Number
1    CA         1   Male      4
2    CA         1 Female      3
3    CA         2   Male      4
4    CA         2 Female      6
5    NV         1   Male      7
6    NV         1 Female      8
7    NV         2   Male      9
8    NV         2 Female     19

提前感谢您的任何想法或建议。

我们可以使用 tidyr 包中的 pivot_longer

library(tidyr)
library(dplyr)
df %>% 
  pivot_longer(
    cols=c(Male, Female),
    names_to = "Sex", 
    values_to = "Number"
  )

  State Education Sex    Number
  <chr>     <int> <chr>   <int>
1 CA            1 Male        3
2 CA            1 Female      4
3 CA            2 Male        4
4 CA            2 Female      6
5 NV            1 Male        7
6 NV            1 Female      8
7 NV            2 Male        9
8 NV            2 Female     19