将 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)
)