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

R语言合并多txt数据集至csv:字段提取问题求助

修正后的R代码及问题说明

原代码核心问题分析

  • 文件名解析逻辑僵化:依赖固定索引提取文件名、日期、事件,无法适配多变的文件名结构;日期提取时未拼接月份日期与年份,导致格式转换失败。
  • 文件内容读取方式错误:用readChar读取整文件后通过向量索引匹配内容,无法正确拆分每行的演讲内容与分段标识。
  • 事件提取不完整:仅取文件名拆分后的第三个元素,丢失多词事件名的剩余部分。

修正后的代码

library(tidyverse)

# 初始化空tibble
biden_data <- tibble()

# 遍历指定目录下的所有txt文件
for (file in list.files(path="../data/csv", pattern="*.txt", full.names=TRUE)) {
  # 提取纯文件名(去掉路径和后缀)
  filename <- str_remove(basename(file), "\\.txt$")
  # 拆分文件名各部分
  name_parts <- str_split(filename, "_", simplify=TRUE)
  
  # 提取地点
  location <- name_parts[1]
  # 拼接日期字符串并转换为Date格式
  raw_date <- paste(name_parts[2], name_parts[3], sep="_")
  date <- as.Date(raw_date, "%b%d_%Y")
  # 提取事件(从第4部分到最后,拼接回完整事件名)
  event <- str_c(name_parts[4:ncol(name_parts)], collapse="_")
  
  # 读取文件内容:文件是带表头的空格分隔格式
  content <- read.table(file, header=TRUE, stringsAsFactors=FALSE, quote='"')
  # 重命名列并添加其他字段
  new_obs <- content %>%
    rename(speech = X1) %>%
    mutate(location = location,
           event = event,
           date = date) %>%
    select(speech, part, location, event, date)
  
  # 合并到总数据
  biden_data <- bind_rows(biden_data, new_obs)
}

# 输出结果或保存为csv
write_csv(biden_data, "../data/csv/biden.csv")

关键修正点

  • 文件名解析优化:用basename+str_remove提取纯文件名,拆分后通过动态索引提取事件部分,适配不同长度的事件名。
  • 日期处理修复:将文件名中的月份日期(如Sep23)与年份(2020)拼接后再转换为Date类型,确保格式正确。
  • 文件读取方式调整:使用read.table直接读取带表头的文件内容,自动拆分每行的演讲内容与分段标识,无需手动正则匹配。
  • 数据合并逻辑规范:通过dplyr管道操作整理单文件数据,确保字段对齐后再合并,彻底解决空字段问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:05:20