首页 > 解决方案 > 为什么我使用 pivot_longer 得到“要替换的项目数不是替换长度的倍数”?

问题描述

我正在尝试将 PL94171 包中的数据重新划分为长格式,并且在重塑数据时遇到了一些麻烦。

我希望将 pop_black、pop_asian 等重新整形为长格式,其中值存储在人口下,种族存储在变量“种族”下。

这是我尝试过的代码,但我不断收到“要替换的项目数不是替换长度的倍数”。

library(PL94171)
pl_path = system.file("extdata/ri2018_2020Style.pl", package="PL94171")

(RI_tbl <- pl_tidy_shp("RI", pl_path))

GEOID    state county    vtd     pop pop_hisp pop_white pop_black pop_aian pop_asian pop_nhpi pop_other
   <chr>    <chr> <chr>     <chr> <int>    <int>     <int>     <int>    <int>     <int>    <int>     <int>
 1 4400700~ RI    Providen~ 4428~     0        0         0         0        0         0        0         0
 2 4400700~ RI    Providen~ 4428~     0        0         0         0        0         0        0         0
 3 4400700~ RI    Providen~ 4428~     0        0         0         0        0         0        0         0
 4 4400700~ RI    Providen~ 4428~    50        0        50         0        0         0        0         0

RI_tbl %>% select(starts_with("pop_")) %>% 
  tidyr::pivot_longer(
    cols = starts_with("pop_"), 
    names_to = "race", 
    names_prefix = "pop_",
    values_to = "population",
    values_drop_na = TRUE,
  )

标签: rtidyr

解决方案


如果我们将其转换为tibble,则警告将消失,因为sf类属性正在创建问题,然后重新转换回sf

library(dplyr)
library(tidyr)
library(sf)
RI_tbl %>%
    select(starts_with("pop_")) %>%
    as_tibble %>%
    tidyr::pivot_longer(
    cols = starts_with("pop_"), 
    names_to = "race", 
    names_prefix = "pop_",
    values_to = "population",
    values_drop_na = TRUE,
  ) %>%
 st_as_sf

-输出

Simple feature collection with 4552 features and 2 fields (with 112 geometries empty)
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -71.43177 ymin: 41.77241 xmax: -71.36969 ymax: 41.82055
Geodetic CRS:  NAD83
# A tibble: 4,552 x 3
                                                                                  geometry race  population
                                                                        <MULTIPOLYGON [°]> <chr>      <int>
 1 (((-71.3975 41.80041, -71.39571 41.80164, -71.39563 41.80158, -71.39547 41.80169, -7... hisp           0
 2 (((-71.3975 41.80041, -71.39571 41.80164, -71.39563 41.80158, -71.39547 41.80169, -7... white          0
 3 (((-71.3975 41.80041, -71.39571 41.80164, -71.39563 41.80158, -71.39547 41.80169, -7... black          0
 4 (((-71.3975 41.80041, -71.39571 41.80164, -71.39563 41.80158, -71.39547 41.80169, -7... aian           0
 5 (((-71.3975 41.80041, -71.39571 41.80164, -71.39563 41.80158, -71.39547 41.80169, -7... asian          0
 6 (((-71.3975 41.80041, -71.39571 41.80164, -71.39563 41.80158, -71.39547 41.80169, -7... nhpi           0
 7 (((-71.3975 41.80041, -71.39571 41.80164, -71.39563 41.80158, -71.39547 41.80169, -7... other          0
 8 (((-71.3975 41.80041, -71.39571 41.80164, -71.39563 41.80158, -71.39547 41.80169, -7... two            0
 9 (((-71.39929 41.79935, -71.39922 41.79938, -71.39915 41.79941, -71.39895 41.79949, -... hisp           0
10 (((-71.39929 41.79935, -71.39922 41.79938, -71.39915 41.79941, -71.39895 41.79949, -... white          0
# … with 4,542 more rows

推荐阅读