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
相关产品推荐
相关产品推荐

