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

如何使用R抓取格式相似的TXT选举结果数据并构建可合并的数据框

实现方案

你可以通过R的tidyverse生态工具完成需求,具体步骤和示例代码如下:

核心处理思路

  • 先跳过TXT开头的无效标题行,提取乡镇、选举日期等元数据
  • 合并多行复合表头,将候选人姓名+党派拼接为单个列名
  • 用固定宽度读取工具解析规整的选票数值
  • 封装为批量处理函数,一次性读取所有同类文件后合并为总数据集

示例代码

# 加载依赖包
library(tidyverse)

# 单个文件处理函数
process_election_txt <- function(file_path) {
  # 读取所有文本行
  all_lines <- readLines(file_path, encoding = "UTF-8")
  
  # 提取元数据
  township <- str_squish(all_lines[1])
  election_date <- str_extract(all_lines[2], "\\w+ \\d{1,2}, \\d{4}")
  
  # 过滤出有效数据行,跳过空行
  data_lines <- all_lines[14:length(all_lines)] %>% 
    str_squish() %>% 
    .[. != ""]
  
  # 自定义合并后的列名(如果同类文件表头固定,一次定义可复用)
  col_names <- c(
    "district",
    "peter_c_bylone_sr_democratic",
    "richard_harlan_democratic",
    "mary_ann_micheletti_levari_republican",
    "henry_l_coia_jr_republican",
    "total_machine_count",
    "total_vote_by_mail",
    "total_provisional_count",
    "total_emergency_count",
    "total_public_count"
  )
  
  # 读取固定宽度格式的数值
  df <- read_fwf(
    I(data_lines),
    fwf_empty(I(data_lines), col_names = col_names),
    na = c("", " ")
  )
  
  # 补充元数据方便后续区分不同文件
  df <- df %>%
    mutate(
      township = township,
      election_date = as.Date(election_date, format = "%B %d, %Y"),
      source_file = basename(file_path)
    )
  return(df)
}

# 批量处理所有同格式TXT
# 替换为你存放TXT文件的文件夹路径
all_txt_files <- list.files("your_txt_folder", pattern = "\\.txt$", full.names = TRUE)
full_dataset <- map_dfr(all_txt_files, process_election_txt)

适配性优化建议

  • 如果不同文件的候选人名单不固定,可以写逻辑自动提取表头行的姓名、党派内容拼接为列名,无需手动定义
  • 如果自动识别列宽不准,可以手动指定fwf_cols的列起止位置,解析稳定性更高
  • 如需适配更多选举类型文件,可以将数据转为长格式,把候选人+党派作为单独字段存储,避免列名不一致导致合并失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 04:57:03