将 table 重塑为具有唯一行的宽格式
Reshaping table into wide format with unique rows
我正在使用 R 分析纽约市的邮政编码和议会区数据,以确定议会区代表哪些邮政编码。我有一个 table,其中包含邮政编码和地区,目前是两列的长格式。
ZIPCODE
CouncilDistrict
11436
28
11213
36
11213
41
11213
35
11212
41
11212
37
11212
42
但我希望 table 为宽幅格式。本质上,由于某些邮政编码可以存在于多个地区,我希望每一行代表一个唯一的邮政编码,并有列告诉我邮政编码所在的议会区。
ZIPCODE
1
2
3
11436
28
NA
NA
11213
36
41
35
11212
41
37
42
我已经尝试了以下所有功能,但没有成功:
testing7 <- dcast(testing, ZIPCODE ~ CounDist)
testing33 <- reshape(testing, idvar = "ZIPCODE", timevar = "ZIPCODE", direction = "wide")
testing33 <- testing %>%
rownames_to_column() %>%
pivot_longer(!rowname, names_to = "ZIPCODE", values_to = "CounDist")%>%
pivot_wider(names_from = "rowname", values_from = "CounDist")
我得到的最接近的是 1 x 558 table,每列代表一个邮政编码,每个单元格是邮政编码所在的每个地区的列表。
如何让我的 table 变成这种宽格式?
实现所需结果的一个选项是按 ZIPCODE
分组并在应用 pivot_wider
之前添加一个 id
列:
library(tidyr)
library(dplyr)
testing %>%
group_by(ZIPCODE) %>%
mutate(id = row_number()) %>%
pivot_wider(names_from = "id", values_from = "CouncilDistrict")
#> # A tibble: 3 × 4
#> # Groups: ZIPCODE [3]
#> ZIPCODE `1` `2` `3`
#> <int> <int> <int> <int>
#> 1 11436 28 NA NA
#> 2 11213 36 41 35
#> 3 11212 41 37 42
数据
testing <- data.frame(
ZIPCODE = c(11436L, 11213L, 11213L, 11213L, 11212L, 11212L, 11212L),
CouncilDistrict = c(28L, 36L, 41L, 35L, 41L, 37L, 42L)
)
我正在使用 R 分析纽约市的邮政编码和议会区数据,以确定议会区代表哪些邮政编码。我有一个 table,其中包含邮政编码和地区,目前是两列的长格式。
ZIPCODE | CouncilDistrict |
---|---|
11436 | 28 |
11213 | 36 |
11213 | 41 |
11213 | 35 |
11212 | 41 |
11212 | 37 |
11212 | 42 |
但我希望 table 为宽幅格式。本质上,由于某些邮政编码可以存在于多个地区,我希望每一行代表一个唯一的邮政编码,并有列告诉我邮政编码所在的议会区。
ZIPCODE | 1 | 2 | 3 |
---|---|---|---|
11436 | 28 | NA | NA |
11213 | 36 | 41 | 35 |
11212 | 41 | 37 | 42 |
我已经尝试了以下所有功能,但没有成功:
testing7 <- dcast(testing, ZIPCODE ~ CounDist)
testing33 <- reshape(testing, idvar = "ZIPCODE", timevar = "ZIPCODE", direction = "wide")
testing33 <- testing %>%
rownames_to_column() %>%
pivot_longer(!rowname, names_to = "ZIPCODE", values_to = "CounDist")%>%
pivot_wider(names_from = "rowname", values_from = "CounDist")
我得到的最接近的是 1 x 558 table,每列代表一个邮政编码,每个单元格是邮政编码所在的每个地区的列表。
如何让我的 table 变成这种宽格式?
实现所需结果的一个选项是按 ZIPCODE
分组并在应用 pivot_wider
之前添加一个 id
列:
library(tidyr)
library(dplyr)
testing %>%
group_by(ZIPCODE) %>%
mutate(id = row_number()) %>%
pivot_wider(names_from = "id", values_from = "CouncilDistrict")
#> # A tibble: 3 × 4
#> # Groups: ZIPCODE [3]
#> ZIPCODE `1` `2` `3`
#> <int> <int> <int> <int>
#> 1 11436 28 NA NA
#> 2 11213 36 41 35
#> 3 11212 41 37 42
数据
testing <- data.frame(
ZIPCODE = c(11436L, 11213L, 11213L, 11213L, 11212L, 11212L, 11212L),
CouncilDistrict = c(28L, 36L, 41L, 35L, 41L, 37L, 42L)
)