You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用wru包predict_race函数时遇地理数据匹配错误求助

使用R语言wru包predict_race函数时的地理数据匹配错误问题

我尝试用R的wru包,结合姓氏、地理位置和党派信息预测美国样本个体的种族,核心调用predict_race函数,但运行时持续报错,无法完成分析。

我的代码如下:

output <- wru::predict_race(
  voter.file = df %>%
    mutate(county = sprintf('%03d', county),
           tract = sprintf('%06d', tract)) %>%
    filter(!is.na(tract)),
  census.geo = "tract",
  census.key = census_api_key, # 已从Census官网获取
  party = "party_code")

根据函数文档,地理指标格式要求:

  • 州为两位缩写(如NJ代表新泽西州)
  • 县为三位字符(如"031"而非"31")
  • 普查区(tract)为六位字符

我已经按要求格式化了county和tract字段,但运行后报错:

County 1 of 1: 071
Proceeding with last name predictions...
ℹ Downloading "wru-data-census_last_c.rds"...
  |=======================================================================================| 100%
ℹ Downloading "wru-data-first_c.rds"...
  |=======================================================================================| 100%
ℹ Downloading "wru-data-last_c.rds"...
  |=======================================================================================| 100%
ℹ Downloading "wru-data-mid_c.rds"...
  |=======================================================================================| 100%
Proceeding with Census geographic data at tract level...
Using Census geographic data from provided census.data object...
State 1 of 1: OR
Error in census_helper_new(key = census.key, voter.file = voter.file,  : 
  The following locations in the voter.file are not available in the census data (listed as state-county-tract):
OR-071-030303

我尝试将数据拆分成10条一组的小批量运行,仍然遇到相同错误导致中断。

可复现错误的样本数据:

df <- tibble::tribble(
  ~surname, ~state, ~county, ~tract, ~party_code,
  "ALEXANDER",   "OR",     71L, 30101L,       "NAV",
  "AQUIPEL",   "OR",     71L, 30101L,       "NAV",
  "BABBITT",   "OR",     71L, 30101L,       "NAV",
  "BACKUS",   "OR",     71L, 30101L,       "DEM",
  "BACKUS",   "OR",     71L, 30101L,       "DEM",
  "BARKER",   "OR",     71L, 30101L,       "DEM",
  "BARTMAN",   "OR",     71L, 30303L,       "REP",
  "BARTMAN",   "OR",     71L, 30303L,       "REP",
  "BASS",   "OR",     71L, 30101L,       "DEM",
  "BATTERMAN",   "OR",     71L, 30303L,       "NAV",
  "BATTERMAN",   "OR",     71L, 30303L,       "NAV",
  "BEARDEN",   "OR",     71L, 30101L,       "NAV",
  "BELANDER",   "OR",     71L, 30101L,       "NAV",
  "BELL",   "OR",     71L, 30303L,       "NAV",
  "BEM",   "OR",     71L, 30101L,       "NAV",
  "BENNETT",   "OR",     71L, 30102L,       "NAV",
  "BERG",   "OR",     71L, 30101L,       "NAV",
  "BERGER",   "OR",     71L, 30303L,       "NAV",
  "BESEAU",   "OR",     71L, 30303L,       "NAV",
  "BIERER",   "OR",     71L, 30101L,       "IND",
  "BILLETTE",   "OR",     71L, 30303L,       "IND",
  "BISCHOFF",   "OR",     71L, 30101L,       "NAV",
  "BLATT",   "OR",     71L, 30101L,       "NAV",
  "BOCHART",   "OR",     71L, 30101L,       "NAV",
  "BOWLIN",   "OR",     71L, 30202L,       "NAV",
  "BURGESS",   "OR",     71L, 30303L,       "NAV",
  "BURNETT",   "OR",     71L, 30101L,       "NAV",
  "BURNETT",   "OR",     71L, 30101L,       "NAV",
  "BYE ODEA",   "OR",     71L, 30101L,       "NAV",
  "BYINGTON",   "OR",     71L, 30101L,       "NAV",
  "CARSLEY",   "OR",     71L, 30102L,       "NAV",
  "CARTWRIGHT",   "OR",     71L, 30101L,       "NAV",
  "CATES",   "OR",     71L, 30101L,       "NAV",
  "CHANDLER",   "OR",     71L, 30101L,       "NAV",
  "CHESHIER",   "OR",     71L, 30102L,       "NAV",
  "CISNEROS",   "OR",     71L, 30303L,       "NAV",
  "COE",   "OR",     71L, 30101L,       "NAV",
  "CORREA",   "OR",     71L, 30303L,       "NAV",
  "COSHOW",   "OR",     71L, 30101L,       "NAV",
  "COURTNEY",   "OR",     71L, 30101L,       "NAV",
  "CROFT",   "OR",     71L, 30101L,       "NAV",
  "CROSSLAND",   "OR",     71L, 30101L,       "NAV",
  "CRUZ",   "OR",     71L, 30102L,       "NAV",
  "CULLENS",   "OR",     71L, 30101L,       "NAV",
  "CURRIER",   "OR",     71L, 30101L,       "NAV",
  "DAHME",   "OR",     71L, 30303L,       "DEM",
  "DAHME",   "OR",     71L, 30303L,       "DEM",
  "DAVIS",   "OR",     71L, 30303L,       "NAV",
  "DAVIS",   "OR",     71L, 30101L,       "NAV",
  "DEHART",   "OR",     71L, 30303L,       "NAV",
  "DENMAN",   "OR",     71L, 30101L,       "NAV",
  "DENNIS",   "OR",     71L, 30101L,       "NAV",
  "DILLESHAW",   "OR",     71L, 30101L,       "NAV",
  "DOOTSON",   "OR",     71L, 30101L,       "NAV",
  "EIDE",   "OR",     71L, 30101L,       "NAV",
  "EILERS",   "OR",     71L, 30101L,       "NAV",
  "EKREN",   "OR",     71L, 30101L,       "DEM",
  "ELLIS",   "OR",     71L, 30101L,       "NAV",
  "ERICKSON",   "OR",     71L, 30101L,       "NAV",
  "ESKELSEN",   "OR",     71L, 30101L,       "NAV",
  "EVANS",   "OR",     71L, 30303L,       "NAV",
  "FETTIG",   "OR",     71L, 30102L,       "NAV",
  "FINDLEY",   "OR",     71L, 30102L,       "NAV",
  "FLANAGAN",   "OR",     71L, 30101L,       "DEM",
  "FRAYCHINEAUD",   "OR",     71L, 30102L,       "NAV",
  "FREY",   "OR",     71L, 30101L,       "NAV"
)

问题原因分析

错误提示明确指出OR-071-030303这个州-县-普查区组合在Census数据中不存在,这不是wru包的bug,而是地理编码存在问题:

  • 你对tract的格式化是正确的(把30303转为030303),但该编码在俄勒冈州(OR)71号县对应的普查数据里没有记录。
  • 可能是原始数据中的tract编码有误,或者该普查区在Census数据库中已被调整/合并。

解决方案

  1. 验证地理编码有效性
    用tidycensus包直接查询该tract是否存在:

    library(tidycensus)
    census_api_key("你的Census API密钥")
    # 查询OR州71号县的所有tract
    tracts <- get_acs(geography = "tract", variables = "B01003_001", state = "OR", county = "071")
    # 检查030303是否在返回的tract列表中
    any(grepl("030303", tracts$GEOID))
    

    如果返回FALSE,说明该tract确实不存在。

  2. 修正或过滤无效编码

    • 若原始数据中的tract编码有误,找到正确的编码替换;
    • 若编码确实无效,将这些样本过滤掉:
      df_clean <- df %>%
        mutate(county = sprintf('%03d', county),
               tract = sprintf('%06d', tract)) %>%
        filter(!(state == "OR" & county == "071" & tract == "030303")) %>%
        filter(!is.na(tract))
      

    再用df_clean运行predict_race函数。

  3. 降级地理单元
    如果无法获取正确的tract编码,可将census.geo参数改为"county",用县层级的数据进行预测:

    output <- wru::predict_race(
      voter.file = df %>%
        mutate(county = sprintf('%03d', county)) %>%
        filter(!is.na(county)),
      census.geo = "county",
      census.key = census_api_key,
      party = "party_code")
    

内容的提问来源于stack exchange,提问作者C.Robin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 12:33:06