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

从北卡选举网站读取TXT文件遇嵌入空值等错误求助

北卡罗来纳州选举数据导入R的问题解决

问题原因

  1. 编码不匹配:NCSBE提供的选举结果TXT文件采用UTF-16LE编码,用默认的UTF-8/ASCII编码读取时,双字节字符的低字节会被识别为null(\0),触发"embedded nulls"错误。
  2. 文件格式非分隔符类型:这些文件是固定宽度格式,不是常规的制表符/逗号分隔文件,read.delim这类分隔符读取函数无法正确解析列结构,导致第2-5行格式异常。
  3. 末尾行无换行符:UTF-16LE编码文件末尾通常缺少换行符,触发readTableHeader的"incomplete final line"错误。

解决办法

方法1:使用read_fwf读取固定宽度文件(推荐)

tidyverse的readr包提供的read_fwf专门处理固定宽度文件,配合指定编码可完美解析:

library(tidyverse)

# 1. 先读取文件行确认列结构(可选,用于核对列宽)
file_content <- read_lines(
  "https://s3.amazonaws.com/dl.ncsbe.gov/ENRS/2020_11_03/results_precinct_sort/PAMLICO_PRECINCT_SORT.txt",
  locale = locale(encoding = "UTF-16LE")
)
head(file_content)

# 2. 根据NCSBE官方数据字典设置列宽(示例,需按实际字段调整)
col_spec <- fwf_cols(
  county_code = 3,
  precinct_code = 6,
  contest_id = 5,
  candidate_id = 5,
  vote_count = 6,
  office_code = 3,
  party_code = 3,
  remaining_fields = -1  # 匹配剩余所有内容,后续可拆分
)

# 3. 读取文件,处理编码和末尾行问题
election_data <- read_fwf(
  "https://s3.amazonaws.com/dl.ncsbe.gov/ENRS/2020_11_03/results_precinct_sort/PAMLICO_PRECINCT_SORT.txt",
  col_positions = col_spec,
  locale = locale(encoding = "UTF-16LE"),
  skip_empty_rows = TRUE,
  trim_ws = TRUE
)

# 查看解析结果
glimpse(election_data)

方法2:用read.table兼容处理

如果不想手动设置列宽,可通过read.table配合编码和填充参数绕过错误:

library(tidyverse)

election_data <- read.table(
  "https://s3.amazonaws.com/dl.ncsbe.gov/ENRS/2020_11_03/results_precinct_sort/PAMLICO_PRECINCT_SORT.txt",
  fileEncoding = "UTF-16LE",
  fill = TRUE,  # 自动填充不完整的行
  skip_empty_rows = TRUE,
  stringsAsFactors = FALSE,
  header = FALSE  # 这类文件无表头,需后续手动命名列
)

# 手动添加列名(参考NCSBE数据字典)
colnames(election_data) <- c("county_code", "precinct_code", "contest_id", "candidate_id", "vote_count", ...)

关键说明

  • 列宽信息可从NCSBE官网的数据字典文档获取,确保每个字段的宽度匹配,避免解析错位。
  • skip_empty_rows = TRUE和fill = TRUE是解决末尾行错误的核心参数,前者跳过空行,后者自动补全行缺失的内容。

内容的提问来源于stack exchange,提问作者Powell Sheagren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:51:18