使用zipcodeR提取blob类型area_code_list生成区号-邮编对照表
解决zipcodeR包中area_code_list(raw/blob类型)的提取与格式转换问题
问题分析
zipcodeR包返回的area_code_list列存储为raw/blob类型,本质是序列化后的数组数据(通常为JSON格式),需要先转换为可读的字符格式,再解析为列表,最后拆分展开成每行一个邮编-区号的结构。
解决方案代码
library(zipcodeR) library(dplyr) library(tidyr) library(jsonlite) # 获取目标邮编数据并处理area_code_list search_state("CA") %>% filter(zipcode %in% c("90201", "90210")) %>% select(zipcode, area_code_list) %>% # 将raw字节转换为JSON字符串并解析为数值/字符向量 mutate(area_code_list = purrr::map(area_code_list, ~ rawToChar(.x) %>% jsonlite::fromJSON())) %>% # 将多元素列表拆分为单独行 tidyr::unnest(area_code_list)
代码说明
- raw转字符与解析:
rawToChar()将底层的raw字节转换为可读的JSON字符串,再通过fromJSON()解析为区号的向量(比如c(310,424));使用purrr::map()对每行的area_code_list批量处理。 - 拆分展开:
tidyr::unnest()会把每个邮编对应的多个区号拆分成独立的行,最终得到你需要的"邮编-区号"一一对应的格式。
输出效果
运行后将得到与预期一致的结果:
# # A tibble: 3 × 2 # zipcode area_code_list # <chr> <int> # 1 90201 323 # 2 90210 310 # 3 90210 424
内容的提问来源于stack exchange,提问作者Chris A.
相关产品推荐
相关产品推荐

