您的位置:首页 >聚焦 >

快看:使用R语言将多个txt汇总到一个csv文件中

2022-07-31 18:37:23    来源:程序员客栈
任务

使用R语言,对多个文件夹内的数百个txt汇总到一个csv文件内。数据集点击阅读原文获取


(资料图片)

数据集

01-21年,全国各地市政府工作报告数据集。

任务分解

1.使用list.files获取文件路径列表2.定义需要的函数-使用readtext::readtext()函数读取报告文本-年份函数、省份函数3. 对每个文件路径,根据2得到三个字段信息,构造tibble结构;4.步骤2和步骤3使用bind_cols合并成一个tibble5.readr::write_csv()函数存至data.csv6.审查data.csv

数据存在province文件内, 该点击下载该数据集

1. txt路径列表

使用 list.files函数查看

文件夹路径列表文件路径列表

province内的文件夹路径列表

library(tidyverse)dirs<-list.files("province",full.names=TRUE)head(dirs)##[1]"province/上海""province/云南""province/内蒙古""province/北京"##[5]"province/吉林""province/四川"

所有省份文件夹内的文件路径列表

files<-list.files(dirs,full.names=TRUE)head(files)##[1]"province/上海/2003年上海政府工作报告.txt"##[2]"province/上海/2004年上海政府工作报告.txt"##[3]"province/上海/2005年上海政府工作报告.txt"##[4]"province/上海/2006年上海政府工作报告.txt"##[5]"province/上海/2007年上海政府工作报告.txt"##[6]"province/上海/2008年上海政府工作报告.txt"

共有617个txt文件

length(files)##[1]617

2.1 readtext读取txt

使用 readtext::readtext 批量读取 多个txt

txts_df<-readtext::readtext(files)head(txts_df)##readtextobjectconsistingof6documentsand0docvars.###Description:df[6×2]##doc_idtext####12003年上海政府工作报告.txt"\"各位代表,现在\"..."## 2 2004年上海政府工作报告.txt "\"各位代表:\n\n \"..."## 3 2005年上海政府工作报告.txt "\"各位代表:\n\n 现\"..."## 4 2006年上海政府工作报告.txt "\"各位代表:\n 上海\"..."##52007年上海政府工作报告.txt"\"政府工作报告\n\"..."##62008年上海政府工作报告.txt"\"\n\t政府工作报告\n\n\"..."

检查text字段长度,是否为617.

length(txts_df[["text"]])##[1]617

2.2 定义功能函数

数据整理到一个csv,我们想保存四个字段,分别是

txt文件名年份省(市)名工作报告内容

年份和省份需要通过定义函数实现~

s<-basename("province/上海/2003年上海政府工作报告.txt")substr(s,1,4)##[1]"2003"

year_func<-function(filepath){year<-filepath%>%basename()%>%substr(1,4)return(year)}name_func<-function(file){file<-basename(file)name<-gsub("政府工作报告.txt","",file)name<-stringr::str_sub(name,start=6)return(name)}file<-"province/上海/2003年上海政府工作报告.txt"year_func(file)name_func(file)##[1]"2003"##[1]"上海"

txts_df 是一个特殊的tibble数据类型。现在需要构造年份、省份函数,获取另外一个tibble。

year_province_df<-tibble(year=year_func(txts_df$doc_id),province=lapply(txts_df$doc_id,name_func)%>%unlist())head(year_province_df)###Atibble:6×2##yearprovince####12003上海##22004上海##32005上海##42006上海##52007上海##62008上海

4. 合并两个tibble

cbind_rows()合并两个tibble

res_df<-bind_cols(year_province_df,txts_df)head(res_df)###Atibble:6×4##yearprovincedoc_idtext####12003上海2003年上海政府工作报告.txt"各位代表,现在,我代表上海市人…## 2 2004 上海 2004年上海政府工作报告.txt "各位代表:\n\n 现在,我代表上…## 3 2005 上海 2005年上海政府工作报告.txt "各位代表:\n\n 现在,我代表上海…## 4 2006 上海 2006年上海政府工作报告.txt "各位代表:\n 上海市国民经济和社…##52007上海2007年上海政府工作报告.txt"政府工作报告\n――2007年1月2…##62008上海2008年上海政府工作报告.txt"\n\t政府工作报告\n\n\t——2008年1月2…

5. 存入csv

使用 write.table(x, file, sep) 写入data.csv

x 待存储数据对象file csv文件路径delim 分割符

readr::write_csv(x=res_df,file="data.csv",col_names=T)

6. 检查data.csv

尝试读取 data.csv

df<-readr::read_csv("data.csv")##Rows:617Columns:4##──Columnspecification────────────────────────────────────────────────────────##Delimiter:","##chr(3):province,doc_id,text##dbl(1):year####ℹUse`spec()`toretrievethefullcolumnspecificationforthisdata.##ℹSpecifythecolumntypesorset`show_col_types=FALSE`toquietthismessage.

head(df)###Atibble:6×4##yearprovincedoc_idtext####12003上海2003年上海政府工作报告.txt"各位代表,现在,我代表上海市人民…## 2  2004 上海 2004年上海政府工作报告.txt "各位代表:\n\n 现在,我代表上海…## 3  2005 上海 2005年上海政府工作报告.txt "各位代表:\n\n 现在,我代表上海…## 4  2006 上海 2006年上海政府工作报告.txt "各位代表:\n 上海市国民经济和社…##52007上海2007年上海政府工作报告.txt"政府工作报告\n――2007年1月2…##62008上海2008年上海政府工作报告.txt"\n\t政府工作报告\n\n\t——2008年1月2…

实验数据

点击阅读原文,跳转进入博客界面,查看数据获取方式。

精选文章

从符号到嵌入:计算社会科学的两种文本表示

推荐 | 社科(经管)文本分析快速指南

使用cntext训练Glove词嵌入模型

认知的测量 | 向量距离vs语义投影

Wordify | 发现和区分消费者词汇的工具

在jupyter中显示pdf内容

改善matplotlib在jupyter内的渲染效果

EmoBank | 中文维度情感词典

Asent库 | 英文文本数据情感分析

karateclub库 | 计算社交网络中节点的向量

视频专栏课 | Python网络爬虫与文本分析

PNAS | 文本网络分析&文化桥梁Python代码实现

Wordify | 发现和区分消费者词汇的工具

BERTopic库 | 使用预训练模型做话题建模

tomotopy | 速度最快的LDA主题模型

文本分析方法在《管理世界》(2021.5)中的应用

Wow~70G上市公司定期报告数据集

100min视频 | Python文本分析与会计

在jupyter内运行R代码

blogdown包 | 使用R语言维护Hugo静态网站

关键词: 文本分析 工作报告

相关阅读