如何在 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
我有一些人口普查数据,部分是长格式,部分是宽格式,是从 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